首页 > 其他 > 详细

高精度加法

时间:2019-12-01 00:56:03      阅读:71      评论:0      收藏:0      [点我收藏+]
高精度加法: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;
}

 

 

 

最后,老婆美图奉上:

技术分享图片

 

 庆祝雪乃党大获全胜

高精度加法

原文:https://www.cnblogs.com/haishenwen/p/11964385.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!