您的位置:首页 > 其它

【2037】利用字符串处理,输出x+y的结果

2017-10-06 19:23 162 查看

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("\n");
}

int main()
{
//freopen("F:\\rush.txt","r",stdin);
input_data();
get_ans();
output_ans();
return 0;
}


 


 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐