大整数加法OJ

06:大整数加法

总时间限制: 1000ms 内存限制: 65536kB
描述
求两个不超过200位的非负整数的和。

输入
有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。
输出
一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
样例输入
22222222222222222222
33333333333333333333
样例输出
55555555555555555555

思路:
1)每一行都是不超过200位的整数,不能用long long类型,需要用字符数组才能存下。
2)然后转化成10进制数并把每一位反转存入数组(防止遇到长度不等的两个字符串个位最后无法匹配的问题)
3)让每一位从个位开始都逐个都相加,把每一位相加后的结果都存入单独的数组,把进位也单独用数组存起来
4)最后判断前导是否为0,为0就舍去,然后在倒序输出结果

具体AC代码如下

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
int main()
{
	char a[201]; //存放第一行数
	char b[201]; //存放第二行数
	char num1[201]; 
	char num2[201]; 
	int carry[202];//存放进位
	int result[202];//存放结果
	int x = 0;//进位
	int len3 = 1;

	cin >> a>> b;
	int len1 = strlen(a);
	int len2 = strlen(b);

	//把字符串转化为十进制数并把个位放在开头
	for (int i = 0; i < len1; i++)
	{
		num1[len1 - i] = a[i] - '0';
	}

	for (int j = 0; j < len2; j++)
	{
		num2[len2 - j] = b[j] - '0';
	}

	while (len3 <= len1 || len3 <= len2)
	{
		result[len3] = num1[len3] + num2[len3] + x;//没除进位的值
		x = result[len3] / 10;
		result[len3] %= 10;            //实际的值
		len3++;

	}
	carry[len3] = x;
	if (carry[len3] == 0)
	{
		len3--;  //除去最高位
	}
	for (int i = len3; i >= 1; i--)
	{
		cout << result[i];
	}
}
  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值