两个巨大整数相加
来源:互联网 发布: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;}