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++ ,