两个巨大整数相加

来源:互联网 发布:vb 对象库未注册 编辑:程序博客网 时间:2024/06/02 12:02
思想:数组;用字符数组接受数字,将字符数组转为整型数组进行计算。
#include<iostream>#include<string>using namespace std;int main(){    char str1[1001],str2[1001];    int n,str_len1,str_len2,str_max,i,number=1;    cin>>n;  n为输入个数     getchar();    while(n--){        int a[1001]={0},b[1001]={0},c[1001]={0};        cin>>str1;  第一个数        str_len1=strlen(str1);  第一个数长度        for(i=0;i<str_len1;i++)            a[i]=str1[str_len1-1-i]-'0';  将一个数从从右到左的赋给数组a[ ]a[0]=字符串str1的最后一个数,即12345变成54321;此句包含了将字符数组转为整数数组的方法        cin>>str2;        str_len2=strlen(str2);        for(i=0;i<str_len2;i++)            b[i]=str2[str_len2-1-i]-'0';  同上        str_max=(str_len1>str_len2 ? str_len1:str_len2);  选择两个字符数组中长度较长的赋给str_max        int k=0;        for(i=0;i<str_max;i++){            c[i]=(a[i]+b[i]+k)%10;   取余的方式获得该位的值            k=(a[i]+b[i]+k)/10;   去商的方式判断是否进位        }        cout<<"Case "<<number<<":"<<endl;        cout<<str1<<" + "<<str2<<" = ";        if(k!=0)            cout<<"1";  如果k!=0,说明最高位溢出,进位,输出一个1        for(i=str_max-1;i>=0;i--)            cout<<c[i];   c[ ]的第一位为所得值的最低位,最后一位为最高位,所以从最后开始依次输出        number++;        cout<<endl;        if(n>=1)  while(n--)判断,比如n=2时,while之后n变成1,符合要求,再一次while之后bian            cout<<endl;    }    return 0;}
原创粉丝点击