zoukankan      html  css  js  c++  java
  • 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
    这个用普通的暴力是肯定会超时,所以要找规律,规律在这个博客上http://www.cnblogs.com/jy02414216/archive/2011/03/09/1977724.html
    那里介绍了三种方法,而我用的是第二种方法
    代码如下
    #include<stdio.h>
    #include<string.h>
    #include<iostream>
    #include<algorithm>
    #include<math.h> 
    using namespace std;
    __int64 get_ans(int n)
    {
       __int64 count=0; 
         if(n==0) 
         {
          count=0;
         }
         else if(n>1&&n<10)
         {
          count=1;
         }
         else
         {
          int high=n;
          int bit=0;
          while(high>=10)
          {
           high=high/10;
           bit++;
          }
          int weight=pow(10,bit);
          if(high==1)
          {
           count+=get_ans(weight-1)+get_ans(n-weight)+n-weight+1; 
          }
          else
          {
           count+=high*(get_ans(weight-1))+get_ans(n-high*weight)+weight; 
          }
         }
         return count;
    }
    int main()
    {
     int n;
     scanf("%d",&n);
     printf("%lld",get_ans(n));
     return 0;
    }
         
         
    
  • 相关阅读:
    nuxt实践
    安卓H5软键盘遮挡输入框
    h5复制粘贴板,打开APP功能
    MVC3
    MVC3
    C#高编
    接口的显式实现(转)
    E-Retail 框架学习
    C#高编
    实现DIV居中布局三种途径(转)
  • 原文地址:https://www.cnblogs.com/NaCl/p/9580215.html
Copyright © 2011-2022 走看看