SDUSTOJ - 1172 小学生算数 (简单字符串处理)
Description
给出两个正整数,计算两个数相加需要多少次进位。
Input
数据有多组,每组包含两个整数,都在int范围内,输入以EOF结尾
Output
一个整数,表示两个数相加需要的进位次数
Sample Input
123 321
555 555
123456789 987654321
Sample Output
0
3
9
HINT
一定要用整数求余相加判断吗?想想有没有简洁的思路。试试用字符串吧,转换思路,分步处理
思路
水题,鉴于最近问的比较多,就统一整理一下这道题的大致思路
本题关注点是单个数字的相加是否构成进位条件,结合HINT也可以知道用字符串处理比较方便,在这里注意char类型中的数字其实不是真正的数字,而是字符,转换成整型数字应-‘0’
根据常识也应该知道(用竖式计算加法也是倒着往前加的),要注意倒序处理字符串,因为后面的进位可能会影响到前面数字的进位(这里用一个flag记录,在这个问题中,flag不可能再大于1),但是因为样例并不能测出来这个坑,所以很多人都踩到了
AC代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define maxn 100
char s1[maxn],s2[maxn];
int main()
{
while( ~scanf("%s%s",s1,s2) )
{
int len1 = strlen(s1), len2 = strlen(s2);
int sum = 0, flag = 0;
for( int i = len1 - 1, j = len2 - 1; ; i--,j--)
{
int temp = 0;
if(i >= 0)
temp += s1[i] - '0';
if(j >= 0)
temp += s2[j] - '0';
if(temp + flag >= 10)
{
flag = 1;
sum++;
}
else
flag = 0;
if( i < 0 && j < 0 )
break;
}
printf("%d\n",sum);
}
return 0;
}