数1游戏

一,实验题目

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

     要求:

    1、写一个函数F(N),返回1~N之间出现“1”的个数,例如:F(12)=5;

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

二,设计思路

  规律:

     每一位上都只有三种情况:0,1,2-9

     第 i 位(个位算作第0位,十位算作第1位。。。。。):

     0:   Num/(10^(i+1))*(10^i)

     1:     Num/(10^(i+1))*(10^i)+Num%(10^i)+1;

     2-9:  (Num/(10^(i+1))+1)*(10^i)

三,设计代码

#include <iostream.h> 
int find(int num) 
{ 
    int count=0;//定义一个存储1的个数的变量 
    int temp;//定义一个缓存的变量 
    for(int i=1;i<=num;i++) 
    { 
        temp=i; 
        while(temp!=0) 
        { 
            if(temp%10==1) 
            { 
                count++; 
            } 
            temp=temp/10; 
          
        } 
    } 
    return count; 
} 
  
int main(void) 
{ 
    int num1; 
    cout<<"请输入数:"; 
    cin>>num1; 
    cout<<"包含1的个数是:"<<find(num1)<<endl; 
    return 0; 
} 

 四,实验截图

 

posted @ 2015-05-03 17:33  神奇的匹诺曹  阅读(161)  评论(0编辑  收藏  举报