【1168】大整数加法

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

#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;

#define SIZE 2001

int main() {
	char a1[SIZE], b1[SIZE];
	int x, lena, lenb, lenc, a[SIZE], b[SIZE], c[SIZE];
	
	memset(a, 0, sizeof(a));
	memset(b, 0, sizeof(b));
	memset(c, 0, sizeof(c));

	gets(a1);
	gets(b1);
	lena = strlen(a1);
	lenb = strlen(b1);
	
	for (int i=0; i<lena; i++) {
		a[lena-i] = a1[i] - 48;				// 将字符串a1转存到整型数组a,且倒序存储 
	}
	for (int i=0; i<lenb; i++) {
		b[lenb-i] = b1[i] - '0';
	}
	
	x = 0;									// 进位x初始化为0 
	lenc = 1;								// 从第一位加起 
	while (lenc<=lena || lenc<=lenb) {		// 判断两个大整数是否都还没有算完 
		c[lenc] = a[lenc] + b[lenc] + x;	// x表示前一次的进位 
		x = c[lenc] / 10;					// 计算进位 
		c[lenc] %= 10;						// 求相加后的数的个位 
		lenc++;								// 计算下一位数 
	}	
	c[lenc] = x;
	while (c[lenc] == 0) {					// 去掉多余的0 
		lenc--;
	} 
	
	for (int i=lenc; i>=1; i--) {
		cout << c[i];
	}  
		
	return 0;
}

发布了49 篇原创文章 · 获赞 0 · 访问量 1035

猜你喜欢

转载自blog.csdn.net/developer_zhb/article/details/105009017