2019.2.22小白之路:百练2981/NOI10-大整数加法

参考了https://blog.csdn.net/qq_41565901/article/details/81027959,但是原博主的代码不能解决前导0问题,对代码进行了一下修改。
转换成int格式的数组是一种很巧妙地解决方式。

#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string.h>
#define MAXD 210
int main() {
	char str1[MAXD], str2[MAXD];
	int num1[MAXD], num2[MAXD];
	memset(str1, 0, sizeof(str1));
	memset(str1, 0, sizeof(str2));
	memset(num1, 0, sizeof(num1));
	memset(num2, 0, sizeof(num2));//将这些数组清零
	scanf("%s", str1);
	scanf("%s", str2);
	int len1, len2, i, j;
	len1 = strlen(str1);
	len2 = strlen(str2);
	j = 0;
	int maxl = len1 > len2 ? len1 : len2;
	for (i = len1 - 1; i >= 0; i--)
		num1[j++] = str1[i] - '0';//数组反向,按照加法的模式
	j = 0;
	for (i = len2 - 1; i >= 0; i--)
		num2[j++] = str2[i] - '0';
	for (i = 0; i < maxl; i++) {
		num2[i] += num1[i];//相加
		if (num2[i] >= 10) {
			num2[i] -= 10;
			num2[i + 1] += 1;//产生进位,毕竟是int数组很方便
		}
	}
	if (num2[maxl]) {
		printf("%d", num2[maxl]);//如果最高位是1,产生进位
		for (i = maxl - 1; i >= 0; i--)//如果想要得到一个数就用char的数组然后用atoi函数转数字
			printf("%d", num2[i]);
	}
	else {
		i = maxl - 1;
		while (num2[i] == 0)
			i--;
		if (i < 0)
			printf("0");
		else {
			for (i; i >= 0; i--)
				printf("%d", num2[i]);
		}
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/shensen0304/article/details/87881620
今日推荐