字符串相加(Leetcode 415)

目录

题目详情

提示

代码

总结


题目详情:


提示:

代码:

#include<stdio.h>
#include<string.h>

void Inverse(char *s);
void Add(char *a,char *b,char *sum);

int main()
{
	char a[100],b[100],sum[300];
	scanf("%s%s",a,b);
	Add(a,b,sum);
	printf("%s",sum);
	return 0;	
}

void Inverse(char *s){	//定义翻转函数,inverse=reverse 
	char tmp;
	int len=strlen(s);
	for(int i=0;i<len-i-1;i++){
		tmp=s[i];
		s[i]=s[len-i-1];
		s[len-i-1]=tmp;
	}
}

void Add(char *a,char *b,char *sum){	//定义求和函数 
	int m=strlen(a);
	int n=strlen(b);
	int acc=0;		//acc表示是否要进位
	int t,i;
	Inverse(a);
	Inverse(b);

	for(i=0;i<m||i<n;i++){
		if(i>=m)
			t=b[i]-'0'+acc;
		else if(i>=n)
			t=a[i]-'0'+acc;
		else
			t=a[i]-'0'+b[i]-'0'+acc;

		sum[i]=t%10+'0';	//不要忘记+'0' 
		if(t>9)		//判断是否需要进位 
			acc=1;
		else
			acc=0;
	}

	if(acc)		//若出了循环acc还是1的话,表明进位后最高位是1 
		sum[i++]='1';	//此处i++的使用很妙,既保证此处使用i的值,又保证下次使用i的时候加1 
	sum[i]='\0';	//莫忘记字符串末尾的'\0' 
	Inverse(sum);
}

总结:

1.做竖式加法要考虑进位问题;

2.注意字符’0‘与数字0的区别,在使用时要注意变换;

3.字符串末尾'\0'不要忘记。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值