博客园 首页 私信博主 显示目录 隐藏目录 管理 动画

高精度加法

高精度加法:https://www.luogu.com.cn/problem/P1601

题目描述

高精度加法,相当于a+b problem,不 用考虑负数.

输入格式

分两行输入。a,b<=10^{500}a,b<=10500

输出格式

输出只有一行,代表a+ba+b的值

输入输出样例

输入 #
1
1
输出 #
2
 

首先,是输入:

 1 cin>>s;
 2 a[0]=s.size();
 3 for(int i=0; i<a[0]; i++) {
 4     a[a[0]-i]=s[i]-'0';
 5 }
 6 cin>>s;
 7 b[0]=s.size();
 8 for(int i=0; i<b[0]; i++) {
 9     b[b[0]-i]=s[i]-'0';
10 } 

 

 因为是高精度,所以什么int,long long的都不行,只能用字符串,再转换成数字。

 

然后再一位一位地加。

 1 memset(c,0,sizeof(c));
 2 int len=a[0]>b[0]?a[0]:b[0];
 3 int g=0;
 4 for(int i=1; i<=len; i++) {
 5     c[i]=a[i]+b[i]+g;
 6     g=c[i]/10;
 7     c[i]%=10;
 8 }
 9 if(g) c[++len]=g;
10 c[0]=len;

 

 

 

最后,再一位一位的输出就行,(记得逆着输出)

for(int i=c[0]; i>=1; i--) {
    cout<<c[i];
}
cout<<endl;

 

 

以下是完整代码

#include<bits/stdc++.h>
using namespace std;
int a[505],b[505],c[510];
string s;
int main() {
    cin>>s;
    a[0]=s.size();
    for(int i=0; i<a[0]; i++) {
        a[a[0]-i]=s[i]-'0';
    }
    cin>>s;
    b[0]=s.size();
    for(int i=0; i<b[0]; i++) {
        b[b[0]-i]=s[i]-'0';
    }
    memset(c,0,sizeof(c));
    int len=a[0]>b[0]?a[0]:b[0];
    int g=0;
    for(int i=1; i<=len; i++) {
        c[i]=a[i]+b[i]+g;
        g=c[i]/10;
        c[i]%=10;
    }
    if(g) c[++len]=g;
    c[0]=len;
    for(int i=c[0]; i>=1; i--) {
        cout<<c[i];
    }
    cout<<endl;
    return 0;
}

 

 

 

最后,老婆美图奉上:

 

 庆祝雪乃党大获全胜

posted @ 2019-11-30 22:51  刻刻帝  阅读(202)  评论(0编辑  收藏  举报
Live2D
返回顶部 class="fui-chat">