zoukankan      html  css  js  c++  java
  • PAT (Advanced Level) 1049 Counting Ones

    题解

      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;
    }
  • 相关阅读:
    关于上传组件
    二分查找的时间复杂度
    commander.js
    执行上下文
    谷歌插件开发
    网站性能
    日记
    <<人间失格>>阅读
    Node.js 应该用在什么地方
    浅谈前后端分离与实践 之 nodejs 中间层服务
  • 原文地址:https://www.cnblogs.com/VividBinGo/p/12236353.html
Copyright © 2011-2022 走看看