zoukankan      html  css  js  c++  java
  • 1的个数

    一:题目

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

    要求:(1) 写一个函数 f(N) ,返回1 到 N 之间出现的 “1”的个数。例如 f(12) = 5。

            (2)在32位整数范围内,满足条件的“f(N) =N”的最大的N是多少。

    二:设计思路

    首先对于第一个问题,根据王老师的提示,想到计算出每个个十百千位上各出现几次1相加即可,考虑各个位上的数等于0,1以及大于1三种情况即可找到规律。

    三:代码

     1 #include<iostream>
     2 using namespace std;
     3 
     4 int geshu(int value)
     5 {
     6     int a,b,c,d,e,a1,b1,c1,d1,e1,sum;
     7     a=0;b=0;c=0;d=0;e=0;
     8     a=value%10;
     9     b=value/10;
    10     b=b%10;
    11     c=value/100;
    12     c=c%10;
    13     d=value/1000;
    14     d=d%10;
    15     e=value/10000;
    16     cout<<"各位上的数字分别为:"<<a<<" "<<b<<" "<<c<<" "<<d<<" "<<e;
    17     if(a==0)
    18         a1=b*1+c*10+d*100+e*1000;
    19     else
    20         a1=1+b*1+c*10+d*100+e*1000;
    21     if(b==0)
    22         b1=c*10+d*100+e*1000;
    23     else if(b==1)
    24         b1=a+1+c*10+d*100+e*1000;
    25     else
    26         b1=10+c*10+d*100+e*1000;
    27     if(c==0)
    28         c1=d*100+e*1000;
    29     else if(c==1)
    30         c1=a+1+b*10+d*100+e*1000;
    31     else
    32         c1=100+d*100+e*1000;
    33     if(d==0)
    34         d1=e*1000;
    35     else if(d==1)
    36         d1=a+1+b*10+c*100+e*1000;
    37     else
    38         d1=1000+e*1000;
    39     if(e==0)
    40         e1=0;
    41     else if(e==1)
    42         e1=a+1+b*10+c*100+d*1000;
    43     else
    44         e1=10000;
    45     sum=a1+b1+c1+d1+e1;
    46     return sum;
    47 }
    48 
    49 void main()
    50 {
    51     int value,sum;
    52     cout<<"请输入一个整数:";
    53     cin>>value;
    54     while(value<0||value>=100000)
    55     {
    56         cout<<"请重新输入:";
    57         cin>>value;
    58     }
    59     sum=geshu(value);
    60     cout<<endl<<"1的个数为:"<<sum<<endl;
    61 }

    四:实验截图

    五:总结

    对于这种数的计算很多都是查找规律,只要找到一个规律突破点那么这个题目迎刃而解,遇到这种情况先列举几个简单而又特殊的例子通过例子找规律,这样就会变得容易的多。

  • 相关阅读:
    [Python] 网络
    [c++] 命令
    [DB] 关系型数据库
    [win] cmd 常用命令
    [linux] Git基本概念&操作
    [SQL] 常用命令
    redis(二十四):Redis分布式锁以及实现(python)
    redis(二十三):Redis 集群(proxy 型)二
    redis(二十二):Redis 集群(proxy 型)一
    redis(二十一):Redis 架构模式实现(哨兵)
  • 原文地址:https://www.cnblogs.com/dyc940210/p/4552922.html
Copyright © 2011-2022 走看看