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

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


 


 

原文地址:https://www.cnblogs.com/AWCXV/p/7632488.html