现在的位置: 首页 > 综合 > 正文

两个大数(位数在50位以上)相加

2013年03月07日 ⁄ 综合 ⁄ 共 1437字 ⁄ 字号 评论关闭

有时候为了出题考一些人,有人就出了这么一道题,其实其中逻辑也很简单。

废话不多说,很简单,请看源码:

#include<stdio.h>

#define N 100
int char_to_int(char ch)
{
	switch(ch){
	case '0':
		return 0;
	case '1':
		return 1;
	case '2':
		return 2;
	case '3':
		return 3;
	case '4':
		return 4;
	case '5':
		return 5;
	case '6':
		return 6;
	case '7':
		return 7;
	case '8':
		return 8;
	case '9':
		return 9;
	}
}

char int_to_char(int ch)
{
	switch(ch){
	case 0:
		return '0';
	case 1:
		return '1';
	case 2:
		return '2';
	case 3:
		return '3';
	case 4:
		return '4';
	case 5:
		return '5';
	case 6:
		return '6';
	case 7:
		return '7';
	case 8:
		return '8';
	case 9:
		return '9';
	}
}

void add(int k,int k2,char one[],char two[])
{
	int i = k2;
	int max = k;
	int j = 0;
	int add_1[N + 1] = {0};
	int c;
	char sum[N + 1]	,sum2[N + 1];;
   	for(;i >= 0; max--,i--,j++) {
		c = char_to_int(one[max]) + char_to_int(two[i]) + add_1[j];
		if(c > 9) {
			sum[j] = int_to_char(c % 10);
			add_1[j + 1] = 1;

		}else {
			sum[j] = int_to_char(c);
		}
	}
	i = k - k2 -1;
	for(;i >= 0; j++,i--,max--) {
		c = char_to_int(one[max]) + add_1[j];
		if(c > 9) {
			sum[j] = int_to_char(c % 10);
			add_1[j + 1] = 1;
		}else {
			sum[j] = int_to_char(c);
		}
	}

	if(add_1[j] == 1) {
		sum[j++] = '1';
	}
    sum[j] = '\0';
	j--;
	i = 0;
    for(; j>=0; j--) {
	   sum2[i] = sum[j];
	   i++;
    }
	sum2[i] = '\0';
	printf("%50s",sum2);
    printf("\n\n");
	
}


void two_bignumber_add()
{
	char one[N],two[N];
	int i = 0,k,k2;

	printf("input a big number:\n");
	gets(one);
	printf("input another number:\n");
	gets(two);
	
	for(i = 0; one[i] != '\0'; i++){}
	k = i - 1;
	for(i = 0; two[i] != '\0'; i++){}
	k2 = i - 1;

	printf("\t\t--------------the result is:----------------");
	printf("\n%50s\n",one);
	printf("%50s\n",two);
	printf("\t\t--------------------------------------------\n");

	if(k >= k2) {
		add(k,k2,one,two);
	}else if(k < k2) {
		add(k2,k,two,one);
	}
}

抱歉!评论已关闭.