大数加法

例如求两个不超过200位的非负整数的和,结果里不能有多余的前导0。

用字符串保存大整数,用整型数组保存结果,注意考虑进位情况

代码如下:

#include<iostream>
#include<string>
using namespace std;

int main()
{
    string s1,s2;
    int a[201];
    while(cin>>s1>>s2)//输入两个字符串 
    {
        if(s1.length()>s2.length())//判断字符串长度,并在短串前面补上0,让两串长度相等 
        {
            string s;
            for(int i=0;i<s1.length()-s2.length();i++)
                s+="0";
            s2=s+s2;
        }
        else
        {
            string s;
            for(int i=0;i<s2.length()-s1.length();i++)
                s+="0";
            s1=s+s1;
        }

        a[0]=0;//结果数组的首位初始化0,用于保存最高位的进位 
        int d=0;//进位初始化为0 
        for(int i=s2.length();i>=1;i--)//从最低位开始计算两个数各位的和,保存到结果数组 
            a[i]=s2[i-1]+s1[i-1]-'0'-'0';//a[1]为计算后结果的最高位,进位情况还未处理 

        for(int i=s2.length();i>=0;i--)//处理进位情况 
        {
            a[i]+=d;//本位加上上一位的进位 
            if(a[i]>=10)//当该位大于等于10时,只保留该位的个位 ,向下一位的进位d为十位 
            {
                d=a[i]/10;
                a[i]%=10;
            }
            else if(a[i]<10)//当该位小于10是,向高位的进位为0 
            {
                d=0;
            }

        }
        if(a[0]>0)//当最高位大于0时直接输出显示结果数组 
        {
            for(int i=0;i<=s2.length();i++)
                cout<<a[i];
            cout<<endl;
        }
        else//最高位等于0时,不显示最高位 
        {
            for(int i=1;i<=s2.length();i++)
                cout<<a[i];
            cout<<endl;
        }
    }
    return 0;
}
/* bottom:40px 距浏览器底部距离 right:40px 距浏览器右边距离 */