大整数加法C++
方法
- 小的数在前,大数在后
- 加数、被加数进行翻转,从低位开始加起,因为数组是从0位开始,与正常手工加法不同。
- 设置进位符carry_flag
- 先对小的数进行控制,做加法
- 再对大的数剩下的部分,做加法
代码
cpp
#include<iostream>
#include<cstring>
using namespace std;
int add(char* s1,char* s2,char* buf){
//确只s1比s2大
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;
}