基准时间限制: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 longint 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;}新闻热点
疑难解答