首页 > 技术文章 > 大整数加法

mutaohengheng 2016-01-07 20:57 原文

#include <stdio.h>
#include <stdlib.h>

/*
	附加题:大整数加法。 
	实现任意范围的两个整数的加法
	( 整数的范围用 int 型的变量无法表示)
*/

int main(){
	char chs1[100],chs2[100];
	scanf("%s", chs1);
	scanf("%s", chs2);
	int len1 = 0, len2 = 0;
	for (; chs1[len1] != 0; ++len1);
	for (; chs2[len2] != 0; ++len2);
	char chs3[101];
	int carry = 0;	//进位
	int i = len1 - 1, j = len2 - 1, k = 0;
	for (; (i >= 0) && (j >= 0); --i, --j){	//chs1与chs2都有数
		int num1 = chs1[i] - '0';
		int num2 = chs2[j] - '0';
		chs3[k++] = ((num1 + num2 + carry) % 10) + '0';
		carry = (num1 + num2 + carry) / 10;
	}
	for (; i >= 0;-- i){	//加上chs1剩余的数
		int num1 = chs1[i] - '0';
		chs3[k++] = (num1 + carry) % 10 + '0';
		carry = (num1 + carry) / 10;
	}
	for (; j >= 0; --j){	//加上chs2剩余的数
		int num2 = chs2[j] - '0';
		chs3[k++] = (num2 + carry) % 10 + '0';
		carry = (num2 + carry) / 10;
	}
	if (carry == 1)
		chs3[k] = '1';
	for (int index = k - 1; index >= 0; --index)
		printf("%c",chs3[index]);
	printf("\n");
	system("pause");
	return 0;
}

  

推荐阅读