解题思路:思路:贪心。倒着扫描,遇到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;
}