当前位置:编程学习 > C/C++ >>

1049. Counting Ones (30)

经典的一道数1的面试题,详细推论以及证明在其他很多博客上都有,讲的都很好
看了下所有的PAT考试,里面涉及到的算法和数据结构还是比较集中的。
因为PAT测试面向企业,所以还是比较喜欢出经典面试题,而在面试中要考察综合性的编程能力的话,链表和树相关操作
都是常考的。
 
[cpp] 
#include <iostream>  
  
int Count(int n)  
{  
    int ans = 0;  
    int base = 1;  
    //count "1" in every digit, then sum  
    while (n/base != 0)  
    {  
        int right = n%base;//low digit  
        int left = n/(base*10);//high digit  
        int now = (n/base)%10;//current digit  
        if (now == 0)//current digit 0, then only determined by high digit  
            ans += left*base;  
        else if(now == 1)//current digit 1, then determined by both high and low digit  
            ans += left*base+right+1;  
        else//current digit > 1   
            ans += (left+1)*base;  
        base *= 10;  
    }  
    return ans;  
}  
int main()  
{  
    int n;  www.zzzyk.com
    while(scanf("%d",&n)!=EOF)  
    {  
        int ans = Count(n);  
        printf("%d\n", ans);  
    }  
    return 0;  
}  
 
补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,