考虑到用int实现两个数字的加法可能会溢出,因此可以采用字符串的方式去实现,输入是两个字符数组,输出一个串。
#include <iostream>
#include <cmath>
#include <string.h>
using namespace std;
void calPrint(char* sum,char *num1,char *num2,int len1,int len2,int jinwei,int index1,int index2,int index,int len);
void Print(char *sum);
void CalSum(char* num1,char* num2)
{
if(num1==NULL||num2==NULL)cout<<"error"<<endl;
int len1=strlen(num1);
int len2=strlen(num2);
int len=max(len1,len2);
cout<<num1<<"+"<<num2<<"="<<" "<<endl;
char *sum=new char[len+2];
for(int i=0;i<=len;i++)
{
sum[i]='0';
}
sum[len+1]='\0';
int carry=0;
int index=0;
calPrint(sum,num1,num2,len1,len2,carry,0,0,0,len);
}
void calPrint(char* sum,char *num1,char *num2,int len1,int len2,int carry,int index1,int index2,int index,int len)
{
if(index==len+1)
{
Print(sum);
return;
}
int temp=0;
if(index1<=len1&&index2<=len2)
{
temp=(num1[len1-index1]-'0')+(num2[len2-index2]-'0')+carry;
}
else if(len1<index1)temp=num2[len2-index2]-'0';
else temp=num1[len1-index1]-'0';
if(temp>=10)
{
temp-=10;
carry=1;
}
else
carry=0;
sum[len-index]='0'+temp;
calPrint(sum,num1,num2,len1,len2,carry,index1+1,index2+1,index+1,len);
}
void Print(char* sum)
{
int len=strlen(sum);
for(int i=0;i<len;i++)
{
cout<<sum[i];
}
cout<<endl;
}
int main()
{
char num1[13]="23905678561";
char num2[14]="1344678976829";
CalSum(num1,num2);
return 0;
}