数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; }
四,实验截图