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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值