自学内容网 自学内容网

大整数加法C++

大整数加法C++

方法

  • 小的数在前,大数在后
  • 加数、被加数进行翻转,从低位开始加起,因为数组是从0位开始,与正常手工加法不同。
  • 设置进位符carry_flag
  • 先对小的数进行控制,做加法
  • 再对大的数剩下的部分,做加法

代码

#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;
}

原文地址:https://blog.csdn.net/qq_37755459/article/details/140354680

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!