码迷,mamicode.com
首页 > 其他好文 > 详细

PAT (Advanced Level) 1049 Counting Ones

时间:2020-01-27 19:32:46      阅读:71      评论:0      收藏:0      [点我收藏+]

标签:==   return   one   bsp   space   sys   printf   level   style   

题解

  now - 当前位的数值

  left - 在now左边的所有数字

  right - 在now右边的所有数字

  mul - right的数量级,如 10,100,100

  ① 如果 now == 0 ,当now可以为1时,左边的数值必须为(0 ~ (left-1)),右边的数值可以是 0 ~ 999… ,所以情况有 left*mul

  ② 如果 now == 1 ,在第①种情况下,再加上right+1,因为当前位已经为1,所以右边的数right在当前范围下是什么无所谓,所以情况为 left*mul+right+1

  ③ 如果 now > 2 ,在第①种情况下,再加上mul,因为now > 2,所以now = 1时,右边的数是什么无所谓,不会超范围,所以情况为 left*mul+mul

代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,left,right,mul=1,now,ans=0;
    scanf("%d",&n);
    while(n/mul)
    {
        left=n/(mul*10);
        right=n%mul;
        now=n/mul%10;
        if(now==0)  ans+=left*mul;
        else if(now==1) ans+=left*mul+right+1;
        else    ans+=left*mul+mul;
        mul*=10;
    }
    printf("%d",ans);
    system("pause");
    return 0;
}

PAT (Advanced Level) 1049 Counting Ones

标签:==   return   one   bsp   space   sys   printf   level   style   

原文地址:https://www.cnblogs.com/VividBinGo/p/12236353.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!