Codeup墓地-2154
src:http://codeup.cn/problem.php?id=2154
2154: 数数
时间限制: 1 Sec 内存限制: 32 MB
题目描述
ACM俱乐部里的那些无聊家伙经常举行数数比赛- -。
比赛规则就是对于一个给出的正整数n,把1到n的正整数写在纸上,然后数里面数字1被写出来的次数。
输入
输入有多组数据。
每组数据一行,包含一个正整数n(小于等于2^26)。
输出
对应每组数据,输出所求的1的出现次数。
样例输入
11
20
样例输出
4
12
//统计1-n中1出现的次数
#include <iostream>
#include <cstdio>
using namespace std;
int function (int n){//按照每一位出现1的次数来进行计算
int factor =1 ;//factor 是该位的权值
int res = 0;
int low, cur, high;
while (n / factor){
low = n % factor;//数字的低位
cur = n / factor % 10;//数字当前位置的数
high = n / factor / 10;//数字的最高位
if (cur==0)
res += high * factor;
else if(cur==1)
res += high * factor + low + 1;
else
res += (high + 1) * factor;
factor *= 10;
}
return res;
}
int main(){
int n;
while(scanf("%d",&n)!=EOF){
printf("%d\n",function(n));
}
return 0;
}