1009 数字1的数量
基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题
收藏
关注
给定一个十进制正整数N,写下从1开始,到N的所有正数,计算出其中出现所有1的个数。
例如:n = 12,包含了5个1。1,10,12共包含3个1,11包含2个1,总共5个1。
Input
输入N(1 <= N <= 10^9)
Output
输出包含1的个数
Input示例
12
Output示例
5
直接上结论。
- 一个数的一个位数如果是0,则1的个数为这个数的高位*位数
- 如果是1则是这个数的低位再加一加上高位*位数
- 大于1则是(高位+1)*位数
-
#include<stdio.h> #define LL long long int main() { int n; while(~scanf("%d",&n)) { int i = 1; LL k = 0; while(n >= i) { k += n/(10*i) * i; if((n/i%10) > 1) { k += i; } if((n/i%10) == 1) { k += n%i + 1; } i *= 10; } printf("%lld\n",k); } return 0; }