• 求1的个数


    题目:

    给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数。

    要求:
    写一个函数 f(N) ,返回1 到 N 之间出现的 “1”的个数。例如 f(12)  = 5。
    在32位整数范围内,满足条件的“f(N) =N”的最大的N是多少。
     
    思路:
    随机输入一个整数N,从1到N分别计算各个数1出现的次数;
    对每个数,从个位开始计算,然后除以10取证继续从个位计算,直至出现最终结果。
     1 #include<iostream>
     2 using namespace std;
     3 int main()
     4 {
     5     int icount = 0, i, N, temp;
     6     cout << "Please input the integer N,N=";
     7     cin >> N;
     8     for (i = 1; i <= N; i++)
     9     {
    10         temp = i;//用临时变量记录i的值
    11         while (temp != 0)//
    12         {
    13             icount += (temp % 10 == 1) ? 1 : 0;//计算个位1出现的次数
    14             temp /= 10;//将计算完的位数去掉(降位),继续计算剩下位数的个位是否出现1
    15         }
    16     }
    17     cout << icount << endl;
    18     return 0;
    19 }

    总结:该思路较为简单,就是计算每一个数拥有1的数量,最后累加得出结果,但是当N的数量变得很大时,程序运行效率极低,得出结果会花费大量的时间。

    该代码不是很理想,而另一个思路是每一位出现1的次数个他的高低位都有关,但目前为止没有实现这个思路的代码。

     
  • 相关阅读:
    区间dp体会
    P1083借教室 noip提高组复赛2012
    P2678跳石头体会 noip2015提高组
    tarjan求LCA的体会
    P1006 传纸条
    P1140 相似基因 详解
    UVA1025 城市里的间谍 A Spy in the Metro 题解
    DAG上的动规嵌套矩形问题(含思考题)
    洛谷P1030c++递归求解先序排列
    Test 2019.7.22
  • 原文地址:https://www.cnblogs.com/SanShaoS/p/4552494.html
Copyright © 2020-2023  润新知