//联合国科教文组织要统计人口,显然一般的int不能满足需要,因此要求定义一个BigInteger的新类,
//多写孔乙己提醒,那是我初学Java时写的,实在不该帖出来,现在重写了代码.
//时间关系,只实现了加法.
BigIntegerTest.java

/***//**
*@authorRey
*@date2006-10-2
*/

publicclassBigIntegerTestextendsTestCase...{

publicvoidtest1()...{
BigIntegerb1=newBigInteger("11");
BigIntegerb2=newBigInteger("11");
BigIntegerb3=newBigInteger("2");
assertEquals(b1,b2);
assertFalse(b1.equals(b3));
}


publicvoidtest2()...{
BigIntegerb1=newBigInteger("12");
BigIntegerb2=newBigInteger("8");
BigIntegerb3=b1.add(b2);
assertEquals(newBigInteger("20"),b3);
}


publicvoidtest3()...{
BigIntegerb1=newBigInteger("99");
BigIntegerb2=newBigInteger("99");
assertEquals(newBigInteger("198"),b1.add(b2));
}


publicvoidtest4()...{
BigIntegerb1=newBigInteger("9999999999999999");
BigIntegerb2=newBigInteger("1");
assertEquals(newBigInteger("10000000000000000"),b1.add(b2));
}


publicvoidtest5()...{
BigIntegerb1=newBigInteger("1");
BigIntegerb2=newBigInteger("9999999999999999");
assertEquals(newBigInteger("10000000000000000"),b1.add(b2));
}
}

BigInteger.java

/***//**
*@authorRey
*@date2006-10-2
*
*/

publicclassBigInteger...{

privateStringvalue=null;


publicBigInteger(Stringvalue)...{
this.value=value;
}


publicBigIntegeradd(BigIntegerb2)...{

char[]a=value.toCharArray();
char[]b=b2.value.toCharArray();


/***//**把最长的放到a里面*/

if(a.length<b.length)...{
char[]temp=null;
temp=a;
a=b;
b=temp;
}

intsize=a.length+1;
char[]result=newchar[size];
intj=result.length-1;

/***//**把barray的值copy到result中,前面空位补48*/

for(inti=b.length-1;i>=0;i--,j--)...{
result[j]=b[i];
}

for(;j>=0;j--)...{
result[j]=48;
}



/***//**result=a+result*/

for(inti=a.length-1,sum=0;i>=0;i--)...{
sum=a[i]+result[i+1];

if(sum>=106)...{
result[i+1]=(char)(sum-10-48);
result[i]++;

}else...{
result[i+1]=(char)(sum-48);
}
}


/***//**char[]转化为Stringvalue*/
StringBuffersb=newStringBuffer();

for(inti=0;i<result.length;i++)...{
if(i==0&&(int)result[i]==48)
continue;
sb.append((char)result[i]);
}
returnnewBigInteger(sb.toString());
}

@Override

publicinthashCode()...{
finalintPRIME=31;
intresult=1;
result=PRIME*result+((value==null)?0:value.hashCode());
returnresult;
}

@Override

publicbooleanequals(Objectobj)...{
if(this==obj)
returntrue;
if(obj==null)
returnfalse;
if(getClass()!=obj.getClass())
returnfalse;
finalBigIntegerother=(BigInteger)obj;

if(value==null)...{
if(other.value!=null)
returnfalse;
}elseif(!value.equals(other.value))
returnfalse;
returntrue;
}

@Override

publicStringtoString()...{
returnvalue;
}

}

分享到:
相关推荐
本篇文章将详细解析一个用于超长整型数据存储与运算的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. *...