一、问题描述
C语言的大数相加问题。
二、算法思想
把长的数字用字符串的的形式输入,然后用数组分别存放2个加数。按照加法的形式逐位相加并进位。然后输出。
三、代码
#include<iostream>
#include<iomanip>
#include<cstring>
using namespace std;
void add(string a,string b)
{
int alength=a.length(),blength=b.length(),clength;
if(alength>blength)
clength=alength;
else
clength=blength;
int num1[clength],num2[clength],num3[clength];//数组初始化为0
memset(num1,0,sizeof(num1));
memset(num2,0,sizeof(num2));
memset(num3,0,sizeof(num3));
int i,j;
for(i=alength-1,j=0;i>=0;i--,j++) //把字符串倒着存到数组里面
num1[j]=a[i]-'0';
for(i=blength-1,j=0;i>=0;i--,j++)
num2[blength-i-1]=b[i]-'0';
int temp=0;
for(i=0;i<clength;i++)
{
num3[i]=(num1[i]+num2[i]+temp)%10; //加法
temp=(num1[i]+num2[i]+temp)/10;
}
for(i=clength-1;i>=0;i--)
{
if(num3[clength]==0)
continue;
cout<<num3[i];
}
cout<<"\n";
}
bool Inputlegal(string a,string b)
{
int alength=a.length(),blength=b.length();
int i;
for(i=0;i<alength;i++)
{
if(a[i]<'0'||a[i]>'9')
return false;
}
for(i=0;i<blength;i++)
{
if(b[i]<'0'||b[i]>'9')
return false;
}
return true;
}
int main()
{
string a,b;
cin>>a>>b;
if(Inputlegal(a,b)) //判断输入合法
{
add(a,b);
}
else
cout<<"输入错误,必须输入全为数字\n";
return 0;
}
四、运行结果示例