题目 1513: 大数加法

题目

输入两个正整数a,b,输出a+b的值。

输入
两行,第一行a,第二行b。a和b的长度均小于1000位。

输出
一行,a+b的值。

样例输入

4 
2 

样例输出

6

解题思路

为了便于进位,将数据读入后个位数放在字符串数组下标为0的位置,并在数组末尾(高位前面)将两个字符串通过补零,变为为位数相等的“数”,之后,逐位相加并逆向输出即可。

代码

#include<stdio.h>
#include<string.h>
void zero_padding(char a[], int len1, int len2){
    int i;
    for (i=len1;i<len2;i++)
        a[i] = '0';
}

void print(char a[],int len){
    int i;
    for (i=len-1;i>=0;i--)
        printf("%c",a[i]);
}

int main()
{
    int i,j,jw=0,temp;
	char a[1001],b[1001],c[1001],d[1001],sum[1010];//a和b的长度均小于1000位
	scanf("%s\n%s",a,b);
	int len,lena = strlen(a);
	int lenb = strlen(b);
	for (i=lena-1;i>=0;i--)//反转
	    c[lena-1-i] = a[i];
	for (i=lenb-1;i>=0;i--)
	    d[lenb-1-i] = b[i];
	
	if (lena<lenb)//补零
	    zero_padding(c,lena,lenb);
	else if (lenb<lena)
	    zero_padding(d,lenb,lena);
	len = (lena>lenb) ? lena:lenb;
	
	for (i=0;i<len;i++)//相加
	{
	    temp = c[i]+d[i]+jw-2*48;
	    sum[i] = temp%10+48;
	    jw = temp/10;
	}
	if (jw!=0)//补位
	    sum[len++] = jw+48;
	    
	print(sum,len);//输出
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值