51Nod 1009 数字1的数量 (数学

    xiaoxiao2021-03-26  23

    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) > 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

    最新回复(0)