zoukankan      html  css  js  c++  java
  • 51nod 1009 数字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

    #include<bits/stdc++.h>
    using namespace std;
    int dp[15];
    void init()
    {
        dp[0] = 0;
        for(int i=1;i<=9;i++)
            dp[i] = 10*dp[i-1] + pow(10,i-1);////预处理每位数中1的个数,例如i=3,就是1~999中含有1的个数
    }
    
    int Count(int n)
    {
        int res=0,len=0,tail=0,radix=1,digit=0;
        while (n)
        {
            digit = n%10;
            n/=10;
            len++;
    
            if( digit > 1)
                res += radix+digit * dp[len-1];  //radix表示10^(len-1),例如len=3,就会有100~199这些数要计算,前导的1会产生radix个
            else if(digit == 1)
            {
                res += tail + 1 + dp[len-1];//tali表示dight后面的数
            }
            tail += digit *radix;
            radix *= 10;
        }
        return res;
    }
    
    int main ()
    {
        init();
        int n;
        scanf("%d",&n);
        printf("%d
    ",Count(n));
    }
  • 相关阅读:
    php文件包含
    微信劫持反弹shell复现
    DNS劫持
    phpstudy后门漏洞复现
    使用远见远控软件控制靶机
    php基础及工具使用
    nmap扫描
    JavaScript创建对象几种形式
    浅拷贝与深拷贝
    原型和原型链
  • 原文地址:https://www.cnblogs.com/Draymonder/p/7373362.html
Copyright © 2011-2022 走看看