Time Limit: 1 second
Memory Limit: 50 MB
【问题描述】
输入两个整数x,y输出它们的和。(0<=x,y<=10的100次幂)【输入】
共2行;
第一行为x。
第二行为y。
【输出】
包含1行,一个整数,表示求得的和。
【输入样例】
123 1234
【输出样例1】
1357 回车结束
【题解】
高精度加法。
原理:
如两个加数分别为
789543
1111111
将他们以整数形式倒着存入两个数组 数组的每一个位置存一位数字
a[] = 345987
b[] = 1111111
加的时候直接c[i]+=a[i]+b[i]就可以,因为是倒着存 进位可以直接进到下一位。
【代码】
#include <cstdio> #include <iostream> #include <string> using namespace std; const int MAXN = 400; string s1,s2; int a[MAXN],b[MAXN],c[MAXN],l1,l2,l3; void input_data() //以字符串的形式输入数据 { cin >> s1; cin >> s2; l1 = s1.size();//获取数字的长度 l2 = s2.size(); for (int i = 1;i <= l1;i++) //存入一个整形数组 a[i] = s1[l1-i] - '0'; for (int i = 1;i <= l2;i++) b[i] = s2[l2-i] - '0'; if (l1 > l2) //获取两个数中那个较长的数字 l3 = l1; else l3 = l2; } void get_ans() { for (int i = 1;i <= l3;i++) //初始化一下答案数组 c[i] = 0; for (int i = 1;i <= l3;i++) //做加法 { c[i] = c[i] + a[i] + b[i]; c[i+1] = c[i+1] + (c[i] /10); //处理进位问题 c[i] = c[i] % 10; } while (c[l3+1]>0) //不断进位。 { l3++; c[l3+1] = c[l3+1] + c[l3]/10; c[l3] = c[l3] % 10; } } void output_ans() { for (int i = l3;i >= 1;i--) printf("%d",c[i]); printf(" "); } int main() { //freopen("F:\rush.txt","r",stdin); input_data(); get_ans(); output_ans(); return 0; }