The 13th UESTC Programming Contest Preliminary—— F - Fabricate equation

解题思路:思路:贪心。倒着扫描,遇到0就忽略,因为对应被减数的该位也设0就好;遇到9,这个特殊,因为比如290-191=99,后面进位后,9这个位也可以使得被减数与结果的该位相同,这样的情况需要两个条件:必须后面可以进位。假如减数那位为0,不论结果为什么,都无法产生进位。第二个条件是,被减数的前一位可以借位,也就是说9这种情况完成后,即便前面遇到减数那位为0,也不能再忽略,只能当一般情况处理。一般情况自然就是k++。

官方题解:

Code:

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
char c[25];

int main()
{
    scanf("%s",c+1);
    int l=strlen(c+1),k=0;
    c[l+1]='0';c[0]='0';
    for(int i=l;i>0;i--)
    {
        if(c[i]=='0')   continue;
        if(c[i]=='9')
        {
            if(c[i+1]=='0')
            {
                k++;
                continue;
            }
            else
            {
                if(c[i-1]=='0') c[i-1]++;//把前面的0毁掉
                continue;
            }
        }
        else
        {
            k++;
        }
    }
    if(c[0]!='0')   k++;
    printf("%d\n",k);
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值