P1601 A+B Problem(高精)

P1601 A+B Problem(高精)

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

输入格式

分两行输入。a,b \leq 10^{500}a,b10500

输出格式

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

输入输出样例

输入 #1
1
1
输出 #1
2
输入 #2
1001
9099
输出 #2
10100
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include<bits/stdc++.h>
using namespace std;
int main()
{
    string s1,s2;
    int a[250],b[250],h;
    memset(a,0,sizeof(a));
    memset(b,0,sizeof(b));
    cin>>s1>>s2;
    a[0]=s1.length();
    b[0]=s2.length();
    for(int i=1;i<=a[0];i++)
        a[i]=s1[a[0]-i]-'0';//把第一个字符串转换为整数,存放在数组a中
    for(int i=1;i<=b[0];i++)
        b[i]=s2[b[0]-i]-'0';//把第二个字符串转换为整数,存放在数组b中
    h=(a[0]>b[0]?a[0]:b[0]);    //取两个字符串最大的长度
    for(int i=1;i<=h;i++)       //做按位加法,同时处理进位
    {
        a[i]+=b[i];
        a[i+1]+=a[i]/10;
        a[i]%=10;
    }
    h++;
    if(a[h]==0&&h>1)
        h--;
    for(int i=h;i>0;i--)
        cout<<a[i];
    return 0;
}

s1[a[0]-i]-'0'

因为ASCII字符中的数字(‘123456’)想转换为纯数字(1,2,3,4...)就要减去48(ASCII单位),而‘0’的ASCII单位正好等于48。

 

一、高精度加法:

高精度加法的实现原理:

1、计算结果的位数
358934760892734899共18位
38960302975237462共17位
故结果不会超过19位。
2、将要计算的数字分割成多段,按照顺序排列(这里以0-32767作为每一存储单位存储的数的限制):

(为提高空间利用效率,可以一个存储单位存储多位数。)
3、将两数相加。

4、输出结果。
从高位到低位依次输出。除最高位以外,其他低位上不足4位的要在前面补上0。

posted @   尤晞  阅读(53)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示