由于硬件的限制导致无法直接进行大数求和计算,故需要通过其他算法解决。
#include<iostream>
using namespace std;
void reverse(char *p);
int _tmain(int argc, _TCHAR* argv[])
{
cout<<"Enter two numbers:"<<endl;
char m[100],n[100];
int sum[100]={0};
int a=0;
cout<<"No.1:";
cin>>m;
cout<<"No.2:";
cin>>n;
//将两个大数以字符串的形式存储,并逆序(便于数据处理)
reverse(m);
reverse(n);
cout<<endl;
cout<<"The Sum of two Numbers is:"<<endl;
int presum=0;
int i = 0,j = 0;
while (m[i]!='\0'&&n[j]!='\0'){ //变量a用于存放进位
presum = m[i] - '0' + n[j] - '0' + a;
sum[i] = (presum)%10;
a = (presum)/10;
i++;
j++;
}
while (m[i]!='\0'){ //大数m中还有剩余
presum = m[i] - '0' + a;
sum[i] = (presum)%10;
a = (presum)/10;
i++;
}
while (n[j]!='\0'){ //大数n中还有剩余
presum = n[j] - '0' + a;
sum[i] = (presum)%10;
a = (presum)/10;
j++;
}
if(a!=0){
sum[i] = a;
i++;
}
int length = i,b = 0;
for(int k = 0;k<length/2;k++){
b = sum[k];
sum[k] = sum[length-k-1];
sum[length-k-1] = b;
}
for(int j = 0;j<length;j++){
cout<<sum[j];
}
cout<<endl;
return 0;
}
void reverse(char *p)
{ //逆序存放
int i=strlen(p);
char temp;
for(int j=0;j<i/2;j++)
{
temp=p[j];
p[j]=p[i-j-1];
p[i-j-1]=temp;
}
}