方法
- 小的数在前,大数在后
- 加数、被加数进行翻转,从低位开始加起,因为数组是从0位开始,与正常手工加法不同。
- 设置进位符carry_flag
- 先对小的数进行控制,做加法
- 再对大的数剩下的部分,做加法
代码
#include<iostream>
#include<cstring>
using namespace std;
int add(char* s1,char* s2,char* buf){if(strlen(s1)>strlen(s2)) return add(s2,s1,buf);int carry_flag=0;char* p=s1;char* q=s2;char* r=buf;while(*p){int t=(*p-'0')+(*q-'0')+carry_flag;*r=t%10+'0';carry_flag=t/10;++p;++q;++r;}while(*q){int t=*q-'0'+carry_flag;*r=t%10+'0';carry_flag=t/10;++q;++r;}if(carry_flag){*r='1';++r;}*r='\0';return 0;
}
int main(){char buf[200];char s1[] = "9999999999999999999999999999999";char s2[] ="123";cout<<"加数1:"<<s1<<endl;cout<<"加数2:"<<s2<<endl;strrev(s1);strrev(s2);add(s1,s2,buf);strrev(buf);cout<<"结果:" << buf <<endl;return 0;
}