P1601 A+B Problem(高精)

题目描述

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

输入格式

分两行输入。a,b≤10500。

输出格式

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

输入输出样例

输入 

1
1

输出 

2

输入 

1001
9099

输出 

10100

说明/提示

20% 的测试数据,0≤a,b≤109;

40% 的测试数据,0≤a,b≤1018。

代码

无注释版

#include<bits/stdc++.h>
using namespace std;
char a[10010],b[10010];
int p[10010],q[10010],s[10010];
int main(){
	memset(p,0,sizeof(p));
	memset(q,0,sizeof(q));
	memset(s,0,sizeof(s));
	cin>>a>>b;
	int n=strlen(a);
	int m=strlen(b);
	for(int i=0;i<n;i++) p[n-i]=a[i]-'0';
	for(int i=0;i<m;i++) q[m-i]=b[i]-'0';
	int x=0,len=1;
	while(len<=n||len<=m){
		s[len]=p[len]+q[len]+x;
		x=s[len]/10;
		s[len]%=10;
		len++;
	}
	s[len]=x;
	if(s[len]==0){
		len--;
	}
	for(int i=len;i>=1;i--){
		cout<<s[i];
	}
}

有注释版 

#include<bits/stdc++.h>
using namespace std;

char a[10010], b[10010]; // 用于存储两个大数的字符串形式
int p[10010], q[10010], s[10010]; // 用于存储两个大数的数字形式和结果

int main() {
    memset(p, 0, sizeof(p));  // 初始化 p 数组,表示 a 的数字形式
    memset(q, 0, sizeof(q));  // 初始化 q 数组,表示 b 的数字形式
    memset(s, 0, sizeof(s));  // 初始化 s 数组,表示结果的数字形式

    cin >> a >> b;  // 输入两个大数 a 和 b 的字符串形式

    int n = strlen(a);  // 获取 a 的长度
    int m = strlen(b);  // 获取 b 的长度

    // 将 a 转换为数字形式,p 数组存储 a 的每一位
    for (int i = 0; i < n; i++) {
        p[n - i] = a[i] - '0';  // 将字符转为数字,并按位存入 p 数组,注意反向存储
    }

    // 将 b 转换为数字形式,q 数组存储 b 的每一位
    for (int i = 0; i < m; i++) {
        q[m - i] = b[i] - '0';  // 同样的操作,将字符转为数字,并按位存入 q 数组,反向存储
    }

    int x = 0, len = 1;  // x 用于存储进位,len 用于表示当前处理到的位数

    // 开始逐位加法,直到处理完所有位
    while (len <= n || len <= m) {
        s[len] = p[len] + q[len] + x;  // 当前位的和,加上进位
        x = s[len] / 10;  // 计算进位
        s[len] %= 10;  // 当前位的数字
        len++;  // 处理下一位
    }

    s[len] = x;  // 最后一位可能还有进位

    // 如果最后一位没有进位(即 s[len] 为 0),则结果的位数应该减少
    if (s[len] == 0) {
        len--;
    }

    // 输出结果
    for (int i = len; i >= 1; i--) {
        cout << s[i];  // 从最高位开始输出
    }

    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值