/*功能:完成来个大整数的相加*/ /* 解题思路: 读入俩个大整数,将他们分别放在俩个字符串中,申明第三个字符串用来保存结果。 从俩个字符串的末位开始相加,若大于10则向前进一位,他们的模数作为该位的结果,若不大于10,直接将该数做为结果, 其中涉及到字符和数字转化的技巧,具体实现请看代码。 */ #include <iostream> #include <string> #include <stdlib.h> using namespace std; int main() { string str1,str2,tem; int len1,len2,i,j,n; cout<<endl<<" *******************该程序完成俩个大整数的相加***********************"<<endl; cout<<"输入第一个大整数:\n"; cin>>str1; cout<<"输入第二个大整数:\n"; cin>>str2; //分别求出俩个大整数的长度 len1=str1.size(); len2=str2.size(); //将位数高的字符串放到str1中,将位数低的字符串放到str2中 if(len1<len2) { tem=str1; str1=str2; str2=tem; i=len1; len1=len2; len2=i; } //k中保存来至低位的进位,开始的时候应该为0 int k=0; //str3中保存相加后的结果,将str3申明为最大数字位数加2,其中最后一位用来作为标志位,保存的是'\0',以便读取的时候不会越界 //俩个n位的数字位相加,其结果不会超过n*10=10n,即不会超过n+1位,所以用余下的n+1位来保存相加后的结果 char *str3 = new char[len1+2]; //将str3中的内容清零 memset(str3,0,len1+2); //该for循环实现了逐位相加的效果,注意循环的条件 for(i=len1-1,j=len2-1;i>-1 && j>-1;i--,j--) { //将字符转化为数字判断n的大小 n=(str1[i]-'0')+(str2[j]-'0')+k; if(n<10) { //将数字再次转化为字符保存在str3中 str3[i+1]=n+'0'; k=0; } else { str3[i+1]=n%10+'0'; k=n/10; } } //位数少的字符可能已经完成运算,但是位数多的字符串可能还存在没有运算的位数,while就是解决这个问题的 while(i>-1) { n=str1[i]-'0'+k; if(n<10) { str3[i+1]=n+'0'; k=0; } else { str3[i+1]=n%10+'0'; k=n/10; } i--; } //在最后一次要将来自低位的进位加到str3中 str3[i+1]=k+'0'; //以下功能是为打印服务的,若前几位是字符0,则不打印 i=0; while(str3[i]=='0') { str3++; i++; } cout<<"运算结果为:"<<str3<<endl; return 0; }
大整数相加
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
上一篇:水晶报表(学习笔记)
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Java计算百分比保留整数
Java计算百分比保留整数的方法,提供了详细的代码示例,一看便懂。
四舍五入 Java Math