超长整数加法。从键盘输入两个超长整数,输出这两个数的和。

#include<stdio.h>

#include<string.h>

#include<stdlib.h>

char* ladd(char* s1, char* s2)
{
	int n1, n2, n, i;
	char* result, c = 0;
	n1 = strlen(s1);//计算两个超大数字串长度
	n2 = strlen(s2);
	n = n1 > n2 ? n1 : n2;//找出两个超大数中最大数字串的长度
	result = (char*)malloc(n + 2);
	for (i = n + 1; i >= 0; i--)//将s1从低位开始搬到result,没有数字的位以及最高位填'0'
		result[i] = i > n - n1 ? *(s1 + i - n +n1 - 1) : '0';
	for (i = n; i >= 0; i--)//将字符转化为数字,并且s1,s2对应相加,c为进位补充
	{
		char tchar;
		tchar = i > n - n2 ? result[i] - '0' + s2[i - n + n2 - 1] - '0' + c : result[i] - '0' + c;
		c = tchar > 9 ? 1 : 0;//进位判定
		result[i] = c == 1 ? tchar - 10 + '0' : tchar + '0';//赋值
	}
	return result;
}

int main()
{
	char num1[100], num2[100], * num;
	scanf("%s %s", num1, num2);
	num = ladd(num1, num2);
	printf("%s+%s=%s\n", num1, num2, num);
	free(num);//释放空间
	return 0;
}

江苏大学2019年电子信息专业研究生考试程序说明题第三题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值