/*别看C/C++我们用的那么多,实际上有很多功能都是需要我们自己写的,比如说这个大数加法,如果你是如PY桶用户,JAVA用户之类的,用已有的封装类就可以轻易达到这个功能*/
解题思路:
基本思路均为使用一个数组将所需要求得大数字存起来,然后进行倒叙相加,发现超过十之后取模进位,再倒叙输出去多余的0即可。
按从低位到高位的顺序两个数字的每一位对应相加,并加上低一位的进位(如果有进位的话),如果某一位对应的数字加起来大于10,就对10取模得到当前位上的数字,再向高位进1,然后再考虑更高一位数字的相加,依次类推,如果位数较长的那个数字的最高位还有进位,别忘记了位数还要增加1。
这里附一个图(当然我不是图的作者,我只是引用):
此外,由于C++的特性,string变量的存在,可以利用string的特性达成一些比较麻烦的char[]方法,这里提供两种代码来分别表示char[]和string的运算方法(内容大同小异)
参考代码:
char[]法:
#include<bits/stdc++.h> #define MAX 1005 using namespace std; int *my_plus(char arry1[],int len1,char arry2[],int len2) { int a[MAX]= {0},b[MAX]= {0}; //这里一定要全部赋值为0,以免出现问题,可以用函数memset(a,0,sizeof(a))代替 for(int i=strlen(arry1)-1,j=0; i>=0; i--) { a[j++]=arry1[i]-'0'; } for(int i=strlen(arry2)-1,j=0; i>=0; i--) { b[j++]=arry2[i]-'0'; } for(int i=0; i<MAX; i++) { a[i]+=b[i]; if(a[i]>=10) { a[i+1]+=a[i]/10; a[i]%=10; } } for(int i=MAX-1; i>=0; i--) { if(a[i]==0) { continue; } else { for(; i>=0; i--) cout<<a[i]; break; } } cout<<endl; return 0; } int main() { char arry1[MAX],arry2[MAX]; cin>>arry1; cin>>arry2; int len1=strlen(arry1),len2=strlen(arry2); if(len1<len2) { char temp[MAX]; strcpy(temp,arry1); strcpy(arry1,arry2); strcpy(arry2,temp); } my_plus(arry1,len1,arry2,len2); return 0; }
这里说一下,数组需要提前赋值为{0},否则的话在输出的时候容易出现一大串乱七八糟的数字,如果不手动赋值为{0}的话,可以使用memset初始化函数用法(如:数组a)memset(a,0,sizeof(a));用于将数组内容清空为0。
理论上字符数组也可以用这个来清空,但是由于我们实际运算都是在操作整形数组,所以这个不请客也可以了。
string的方法(定义一个变量存储临时的位相加)
#include<iostream> #include<string> using namespace std; string person_plus(string a,int lena,string b,int lenb){ int flag=0,aa,bb,sum; while(lena>0) { aa=a[lena-1]-'0'; if(lenb>0) bb=b[lenb-1]-'0'; else bb=0; sum=aa+bb+flag; if(sum>=10) { a[lena-1]='0'+sum%10; flag=1; } else { a[lena-1]='0'+sum; flag=0; } lena--; lenb--; } if(flag==1) a="1"+a; return a; } int main() { string a,b; cin>>a; cin>>b; if(a.size()<b.size()) { string temp=a; a=b; b=temp; } cout<<person_plus(a,a.length(),b,b.length())<<endl; return 0; }
两个代码都可以通过系统。
这里大家可以看得出一件事情,利用string可以更方便把数据传递给主函数,主函数只需要进行调用,而使用char[]虽说不是不能传递,但是相比string而言传递更加麻烦,麻烦则不方便主函数进行调用,可以见的,string在输出的时候直接cout即可,而char[]还要配合循环使用。
PS一下这个题解的前面几个发表者都是我学长!
这题也是他们教的。
0.0分
6 人评分