大整数相加

来源:互联网 发布:python基础教程怎么样 编辑:程序博客网 时间:2024/06/13 13:39
/*功能:完成来个大整数的相加*//*解题思路:读入俩个大整数,将他们分别放在俩个字符串中,申明第三个字符串用来保存结果。从俩个字符串的末位开始相加,若大于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中保存来至低位的进位,开始的时候应该为0int 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;}

原创粉丝点击