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)*位数
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
) >
1) {
k += i;
}
if((n/i
) ==
1) {
k += n
%i +
1;
}
i
*= 10;
}
printf(
"%lld\n",k);
}
return 0;
}
转载请注明原文地址: https://ju.6miu.com/read-658887.html