一,实验题目
给定一个十进制的正整数,写下从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;
}
四,实验截图