import java.io.*;
public class BigInteger//定义长整型的类
{
private static final int add1Max=100;//可计算最长位数
private static final int add2Max=100;//同上
private char[] add1 = new char[add1Max];
private char[] add2 = new char[add1Max];
private int len1;
private int len2;
public void setAdd1() throws IOException
{
int i=0;
String sLine1;
System.out.print("Please input add1 : ");//输入第一个长整数
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
sLine1=in.readLine();
for(;i<sLine1.length();i++)
add1[i]=sLine1.charAt(i);
for(i=0;i<add1Max;i++)//len1=add1.length()
{
if(add1[i]!='\0')
len1++;
}
}
public void setAdd2() throws IOException
{
int i=0;
String sLine2;
System.out.print("Please input add2 : ");//输入第二个长整数
BufferedReader in2 = new BufferedReader(new InputStreamReader(System.in));
sLine2 = in2.readLine();
for(i=0;i<sLine2.length();i++)
add2[i]=sLine2.charAt(i);
for(i=0;i<add2Max;i++)//len2=add2.length()
{
if(add2[i]!='\0')
len2++;
}
}
public char[] getAdd1()
{
return add1;
}
public char[] getAdd2()
{
return add2;
}
public int getLen1()
{
return len1;
}
public int getLen2()
{
return len2;
}
public void add(char[] add1,char[] add2)//BigInteger相加方法
{
int len = Math.max(len1,len2);
int i;
char[] temp1 = new char[len];
char[] temp2 = new char[len];
char[] result = new char[len+1];
for(i=0;i<len1;i++)
temp1[len-1-i]=add1[len1-1-i];
for(i=0;i<len2;i++)
temp2[len-1-i]=add2[len2-1-i];
int m=0;
for(i=0;i<len;i++)//相加
{
if(temp1[len-1-i]!=0)
temp1[len-1-i]-=48;
if(temp2[len-1-i]!=0)
temp2[len-1-i]-=48;
m=temp1[len-1-i]+temp2[len-1-i];
if(m>=10)
{
m-=10;
result[len-i]+=m;
result[len-1-i]+=1;
}
else result[len-i]+=m;
}
System.out.print("add1 + add2 = ");//输出相加结果
i=0;
if(result[0]==0)
i=1;
for(;i<len+1;i++)
System.out.print(Integer.toString(result[i]));
}
public void sub(char[]sub1,char[]sub2)//BigInteger相减方法
{
int len = Math.max(len1,len2);
int i;
char[] temp1 = new char[len];
char[] temp2 = new char[len];
char[] result = new char[len+1];
if(len1>len2)
{
for(i=0;i<len1;i++)
temp1[len-1-i]=sub1[len1-1-i];
for(i=0;i<len2;i++)
temp2[len-1-i]=sub2[len2-1-i];
}else//保证减数大于被减数
{
for(i=0;i<len1;i++)
temp2[len-1-i]=sub1[len1-1-i];
for(i=0;i<len2;i++)
temp1[len-1-i]=sub2[len2-1-i];
}
int m=0;
for(i=0;i<len;i++)//相减
{
if(temp1[len-1-i]!=0)
temp1[len-1-i]-=48;
if(temp2[len-1-i]!=0)
temp2[len-1-i]-=48;
m=temp1[len-1-i]-temp2[len-1-i];
if(m<0)//如果计算的那一位的减数小于被减数那么相前一位借10
{
m+=10;
result[len-i]+=m;
temp1[len-1-i]-=1;
}
else result[len-i]+=m;
}
System.out.print("add1 - add2 = ");//输出减法结果
i=0;
while(result[i]==0)
i++;
if((len2>len1)||(len1==len2&&sub1[0]<sub2[0]))
System.out.print("-");
for(;i<len+1;i++)
System.out.print(Integer.toString(result[i]));
}
public static void main(String[] args) throws IOException//主方法
{
BigInteger big = new BigInteger();//生成一个BigInteger对象
big.setAdd1();//得到数1
big.setAdd2();//得到数2
char[] num1 = big.getAdd1();//相加
char[] num2 = big.getAdd2();//相减
int len1 = big.getLen1();
int len2 = big.getLen2();
System.out.println();
System.out.println("The length of add1 is : " + len1);
System.out.println("The length of add2 is : " + len2);
big.add(num1,num2);
System.out.println();
big.sub(num1,num2);
}
}
分享到:
相关推荐
本篇文章将详细解析一个用于超长整型数据存储与运算的C语言程序片段,该程序涵盖了超长整型数据的加、减、乘法运算以及输入处理和比较功能。 #### 代码概览 首先,程序定义了几个必要的头文件,包括`stdio.h`, `...
在本文中,我们将深入探讨如何使用C语言实现超长整数字符串的相加操作。超长整数是指那些超过了标准整型(如int、long long)所能表示范围的整数,通常出现在大数运算或者加密算法中。由于C语言本身并不支持这样的...
在C++编程中,处理大整数(也称为长整数)的相加是一个常见的问题,特别是在数值计算、加密算法或者模拟大型系统时。由于C++标准库中的`int`、`long`或`long long`类型有其数值范围限制,当超过这个范围时,就需要...
标题"计算器——长整型、高精度计算"指的是设计一个计算器,它能够处理超过标准整型范围的数字,并且能够执行基本的加减乘除运算。这种计算器通常需要自定义数据结构,如链表,来存储长整型数字的每一位。链表是一个...
本篇文章将根据给定的文件标题、描述及部分内容,详细介绍如何实现一个能够处理同名后数目相加的统计功能的程序。 #### 题目背景与需求分析 根据题目描述,我们需要编写一个程序来读取一个以等号`=`划分名称和数值...
为了将用户输入的字符串转换为可以进行数学运算的数组形式,程序使用了一个辅助函数`change`,该函数接收一个字符并返回其对应的整数值: ```c int change(char a) { switch (a) { case '0': return 0; break; ...
在C语言中,处理大数(超过普通整型或浮点型变量范围的数字)的加减运算是一项挑战。这通常涉及到使用字符数组来存储这些大数,因为字符数组可以容纳任意长度的字符串,从而表示任意大小的数字。下面我们将详细讨论...
本程序的目标是实现一个简单的命令行计算器,它能够接收用户从键盘输入的两个数,并进行加、减、乘、除四种基本数学运算。以下是关于该程序的详细解释: 1. **输入流运算符(cin)**: 输入流运算符`cin`用于从...
根据给定的信息,本文将详细解释如何在C语言中编写一个程序来实现64位无符号整数的加法和减法运算。 ### 一、背景介绍 在计算机科学领域,处理大整数是一个常见的需求,尤其是在那些需要精确计算且数字可能非常大...
总之,"VC的小程序(连续整型数的阶乘累加)"是编程教育中的一个基础练习,它涵盖了整数阶乘计算和累加操作的核心概念,是学习C++或其他类似编程语言时的经典例子。通过此类练习,不仅可以提升编程技巧,还能增强对...
接下来,我们需要一个新数组`sum`来存储两个数组相加的结果。由于数组不能动态扩展,所以`sum`的长度应为`len1 + len2`,确保可以容纳所有元素。 在实现数组相加的过程中,我们使用两个独立的`for`循环。第一个循环...
本资源主要探讨如何使用C语言实现两个超过100位的大数相加,这是对传统整型数据处理能力的扩展,因为C语言的标准整型类型(如int和long)通常无法存储这么大的数值。 C语言本身并不直接支持大数运算,但我们可以...
`: 声明了一个长整型变量`n`,用于累加输入的整数,并初始化为0。 ### 2. 控制台输入输出 #### 2.1 输出信息 - `Console.Out.WriteLine("请输入50个整数:")`: 向控制台输出提示信息。 - `Console.Out.WriteLine(...
如果第一个字符串在任何位置上都小于第二个字符串,那么第一个数较小;如果第一个字符串在某个位置上大于第二个字符串,或者第二个字符串比第一个短,那么第一个数较大。在相加过程中,从低位到高位逐位进行,同时...
根据提供的文件信息,我们可以分析出该程序主要实现了多项式的表示、创建、遍历、排序以及两个多项式的相加等功能。接下来我们将对这些功能进行详细解释。 ### 一、多项式的链表表示 #### 1. 结构体定义 在代码中...
在这个案例中,压缩包内有一个名为"20221491115方杨- 实验一长整型数操作"的文件,这暗示了我们可能在讨论一个关于计算机编程中的长整型数操作的教学实验。 长整型数(Long Integer)是编程语言中的一种数据类型,...
(5) 定义矩阵相加的函数,实现两个矩阵相加的功能,结果保存在另一个矩阵中; (6) 定义矩阵相减的函数,实现两个矩阵相减的功能,结果保存在另一个矩阵中; (7) 动态申请三个矩阵:A1、A2、A3; (8) 初始化A1...
例如,一个整型数组int[] numbers可以存储一系列的整数,如numbers[0], numbers[1], numbers[2]等。数组的长度在创建时必须指定,且一旦定义后不可改变,这被称为固定大小的数组。 创建数组主要有两种方式:静态...
`:声明了`sum`函数,该函数接收三个整型数组指针和一个整型变量作为参数,并返回一个整型值。 - `void show_arr(const int ar[], int n);`:声明了`show_arr`函数,用于显示数组的内容。 3. **主函数**: - `...
1. **存储结构**:利用链表实现长整数的存储,每个链表结点包含一个整型变量。由于C语言中的int类型有限制,所以每个节点仅能存储四位(如:千位、百位、十位、个位),通过连接多个节点来表示任意长度的整数。 2. *...