大整数相加java,大整数相加c语言
读入两个大整数,分别放在两个字符串中,声明第三个字符串用于保存结果。
从两个字符串的最后一位开始相加,如果大于10,则前进一位,它们的模就是该位的结果;如果不大于10,该数字将直接是结果。
它涉及到字符和数字转换的技巧。具体实现请见代码。
#包括iostream
#包含字符串
#包含stdlib.h
使用命名空间std
int main()
字符串str1,str2,tem
int len1,len2,I,j,n;
couendl * * * * * * * * * * * * * * * * * *此程序完成两个大整数的加法运算* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *;
Cout 输入第一个大整数:\ n ;
CIN str 1;
Cout 输入第二个大整数:\ n ;
CIN str 2;
//分别求两个大整数的长度
len 1=str 1 . size();
len 2=str 2 . size();
//将高位的字符串放入str1,低位的字符串放入str2。
if(len1 len2)
tem=str1
str1=str2
str2=tem
i=len1
len1=len2
len 2=I;
//k保存低位开始的进位,开始应该是0。
int k=0;
//将相加的结果存放在str3中,声明str3为最大位数加2,其中最后一位作为标志位,存放 \0 ,这样读取时就不会越界。
//两个N位数字位相加,结果不会超过n*10=10n,也就是不会超过N-1位,所以剩下的N-1位用来保存相加的结果。
char * str 3=new char[len 1 2];
//清除str3中的内容。
memset(str3,0,len 1 2);
//这个for循环达到了逐位相加的效果。注意循环的条件。
for(i=len1-1,j=len 2-1;i -1 j i -,j -)
//将字符转换成数字来判断n的大小
n=(str 1[I]- 0 )(str 2[j]- 0 )k;
如果(n 10)
//再次将数字转换成字符并保存在str3中
str 3[I 1]=n 0 ;
k=0;
其他
str 3[I 1]=n 0 ;
k=n/10;
//数字少的字符可能已经完成了运算,但是数字多的字符串可能还有数字没有运算。while是这个问题的解决方案。
while(i -1)
n=str 1[I]- 0 k;
如果(n 10)
str 3[I 1]=n 0 ;
k=0;
其他
str 3[I 1]=n 0 ;
k=n/10;
I-;
//最后一次将低位的进位加到str3。
str 3[I 1]=k 0 ;
//以下函数用于打印。如果前几个数字是字符0,则不会打印。
I=0;
while(str3[i]==0 )
str3
我;
cout 运算的结果是: str3 endl
返回0;
}
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。