wikioi 3116 高精度练习之加法
发布时间:2020-12-14 03:58:54 所属栏目:大数据 来源:网络整理
导读:题目描述? Description 给出两个正整数A和B,计算A+B的值。保证A和B的位数不超过500位。 输入描述? Input Description 读入两个用空格隔开的正整数 输出描述? Output Description 输出A+B的值 样例输入? Sample Input 3 12 样例输出? Sample Output 15 数据
题目描述?Description
输入描述?Input Description
输出描述?Output Description
样例输入?Sample Input
样例输出?Sample Output
数据范围及提示?Data Size & Hint
下面三种方法有细微的差别: 第一种方法:顺序读入字符串:#include <iostream> #include <string> #include <sstream> #include <cstring> using namespace std; int main() { char a[501],b[501],c[502]; memset(a,'0',sizeof(a)); memset(b,sizeof(b)); memset(c,sizeof(c)); cin >> a >> b; int aLen = 0; int bLen = 0; for(int k=0; k<501; k++) { if(a[k]==' ') { aLen = k; break; } } for(int k=0; k<501; k++) { if(b[k]==' ') { bLen = k; break; } } int i=aLen-1,j=bLen-1,k=501; int carry = 0; while(i>=0 && j>=0) { int cc = (a[i]-'0')+(b[j]-'0')+carry; carry = cc/10; cc%=10; c[k] = cc+'0'; i--; j--; k--; } while(i>=0) { int cc = (a[i]-'0')+carry; carry = cc/10; cc%=10; c[k] = cc+'0'; i--; k--; } while(j>=0) { int cc = (b[j]-'0')+carry; carry = cc/10; cc%=10; c[k] = cc+'0'; j--; k--; } if(carry > 0) c[k] = carry; for(j=0; j<502; j++) if(c[j]-'0' > 0) break; for(; j<502; j++) cout << c[j]; } 第二种方法:逆序字符串: #include <iostream> #include <cstring> using namespace std; int main() { char x[555],y[555]; int a[555]={0},b[555]={0},c[555]={0}; cin >> x >> y; int len_x = strlen(x); int len_y = strlen(y); for(int k=0; k<len_x; k++) { a[k]=x[len_x-1-k]-'0'; } for(int k=0; k<len_y; k++) { b[k]=y[len_y-1-k]-'0'; } int len_max = len_x>len_y?len_x:len_y; int carry = 0; for(int i=0; i<len_max; i++) { c[i]=(a[i]+b[i]+carry)%10; carry=(a[i]+b[i]+carry)/10; } if(carry > 0) c[len_max] = carry; if(c[len_max]==1) cout << 1; for(int i=len_max-1; i>=0; i--) cout << c[i]; return 0; } 第三种方法:进位操作分离: #include <iostream> #include <cstring> using namespace std; int main() { char x[555],c[555]={0}; cin >> x >> y; int len_x = strlen(x); int len_y = strlen(y); for(int k=0; k<len_x; k++) { a[k]=x[len_x-1-k]-'0'; } for(int k=0; k<len_y; k++) { b[k]=y[len_y-1-k]-'0'; } int len_max = len_x>len_y?len_x:len_y; for(int i=0; i<len_max; i++) { c[i]=a[i]+b[i]; } for(int i=0; i<len_max; i++) { if(c[i]>=10) { c[i+1]++; c[i] -= 10; } } if(c[len_max]==1) cout << 1; for(int i=len_max-1; i>=0; i--) cout << c[i]; return 0; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |