cf402 B. Weird Rounding

B. Weird Rounding
time limit per test1 second
memory limit per test256 megabytes
inputstandard input
outputstandard output
Polycarp is crazy about round numbers. He especially likes the numbers divisible by 10k.

In the given number of n Polycarp wants to remove the least number of digits to get a number that is divisible by 10k. For example, if k = 3, in the number 30020 it is enough to delete a single digit (2). In this case, the result is 3000 that is divisible by 103 = 1000.

Write a program that prints the minimum number of digits to be deleted from the given integer number n, so that the result is divisible by 10k. The result should not start with the unnecessary leading zero (i.e., zero can start only the number 0, which is required to be written as exactly one digit).

It is guaranteed that the answer exists.

Input
The only line of the input contains two integer numbers n and k (0 ≤ n ≤ 2 000 000 000, 1 ≤ k ≤ 9).

It is guaranteed that the answer exists. All numbers in the input are written in traditional notation of integers, that is, without any extra leading zeros.

Output
Print w — the required minimal number of digits to erase. After removing the appropriate w digits from the number n, the result should have a value that is divisible by 10k. The result can start with digit 0 in the single case (the result is zero and written by exactly the only digit 0).

Examples
input
30020 3
output
1
input
100 9
output
2
input
10203049 2
output
3
Note
In the example 2 you can remove two digits: 1 and any 0. The result is number 0 which is divisible by any number.
题意大概是:一,从n中去掉几个数后,n/10^k,能整除
二,注意当0的数量小于k时就要考虑两种情况了,当n里没0时,去掉所有的数,当n里有0时,留一个0。
我从数的大小来考虑的,其实应该从0的数量来考虑,方向错了,怎么也不会对

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
    long long int n,k;
    scanf("%lld%lld",&n,&k);
    long long int temp=n,t=0,count=0;
    while(temp>0)
    {
        if(temp%10==0)
            t++;//0的数量
        else
            count++;//不是0的数量
        temp=temp/10;
    }
    if(t<k)
    {
        if(t>0)
            printf("%lld",count+t-1);
        else
            printf("%lld",count);
    }
    else
    {
        long long int ans=0;
        t=0;
        while(n>0)
        {
            if(n%10==0)
                t++;//当0的个数够时跳出循环;
            else
            {
                ans++;//计算需要去除几个数
            }
            if(t==k)
                break;
            n=n/10;
        }
        printf("%lld",ans);
    }
    return 0;
}
"No regrets."
原文地址:https://www.cnblogs.com/zxy160/p/7215159.html