频道栏目
首页 > 资讯 > C语言 > 正文

c语言经典题之大数相加

17-10-05        来源:[db:作者]  
收藏   我要投稿

c语言经典题之大数相加

/* 
【程序32】 大数相加
* 题目:求出两个非常大的数的和,例如:123456789123456+123456789 
* 程序分析:和非常大,int、long、long long 等数据类型都装不下这个数怎么办?采用数组方式求。   */

#include 
#include 	//strlen() memset()

#define SIZE 1000

void add_oper(const char num1[], const char num2[]);
void output(int num[], int len);

int main(int argc, char *argv[])
{
	char num1[SIZE] = {};
	char num2[SIZE] = {};
	
	puts("Input number1:");
	scanf("%s", num1);
	fputs("Input number2:\n", stdout);
	scanf("%s", num2);
	
	add_oper(num1, num2);
	
	return 0;
}

// 运算	
void add_oper(const char num1[], const char num2[])
{
	unsigned int len1 = strlen(num1);
	unsigned int len2 = strlen(num2);
	
	int result_add[len1+len2];
	memset(result_add, 0, sizeof(result_add));
	
	// 转换并相加
	for (int i=len1-1; i>=0; i--)
	{
		result_add[i+len2] += num1[i] - '0';
	}
	for (int j=len2-1; j>=0; j--)
	{
		result_add[j+len1] += num2[j] - '0';
	}
	
	// 进位
	for (int i=len1+len2-1; i>=0; i--)
	{
		result_add[i-1] += result_add[i]/10;
		result_add[i] %= 10;
	}
	
	output(result_add, len1+len2); 
}

// 输出
void output(int result[], int len)
{
	printf("Result = ");
	int k, n = 0;
	while (result[n] == 0){n++;}
	for (k=n; k

 

结果:

 

相关TAG标签
上一篇:集合的实现“编程开发”
下一篇:矩阵乘法-二维树状数组-整体二分
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站