大数相加的解释和模板代码

首先因为我自己的马虎,总是错,新手总是以各种原因错,可能是马虎i打成了j,或者少加了=,少考虑的情况,总之路漫漫其修远兮,都没刷够1000道题,算什么热爱。
int是三十二位,大数相加很容易溢出,所以要用char,int总是限制在一定数内,long long int 也如此,但char字符串明显可以存更多的数。
用char存储大数后,将各个位存在int数组里面,各个数相加,k为进位运算,最后因为字符串存入数组时下标是 0,1,2,3,4,,,,但是我们正常大数输出顺序为n,n-1,,,4,3,2,1,0,所以要倒着输出。
模板代码:

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int main()
{
    int q[10000],w[10000]; 
    char s1[10000],s2[10000];
    cin>>s1>>s2;
    int a=strlen(s1);
    int b=strlen(s2);
    int i=0,j=0,smax;
    while(a-1-i>=0)
    {
    q[i]=s1[a-1-i]-'0';
    i++;
    }
    while(b-1-j>=0)
    {
    w[j]=s2[b-1-j]-'0';
    j++;
    }
    if(a>=b)smax=a;
    else smax=b;
    int add[smax]={0};
    int k=0;
    for(int i=0;i<smax;i++)
    {
        add[i]=(q[i]+w[i]+k)%10;
        k=(q[i]+w[i]+k)/10;
    }
    if(k>0)
    {
        smax=1;
        cout<<smax;
    }
    for(int i=smax-1;i>=0;i--)
    {
        cout<<add[i];
    }
    cout<<endl;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章