十进制数中1的个数

本文探讨了一个数学问题,即找出在一定范围内,所有整数中出现数字1的次数,并通过编程实现。重点在于通过数学推理找到规律,进而计算任意整数范围内数字1的出现次数。此外,文章还揭示了满足特定条件的最大整数值。

一、题目:

    给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数。要求: 1.写一个函数 f(N) ,返回1 到 N 之间出现的“1”的个数。例如 f(12)  = 5。2.在32位整数范围内,满足条件的“f(N) =N”的最大的N是多少。

二、思路:
  这道题偏向数学的推理,其根本在于找规律,而规律则在于将所给的数进行分解,分成个十百千等位数的个体,再从每个中寻找规律。通过整理,每一位有多少个1只与其前后两位有关系,具体算法程序如下:
三、源程序
 1 #include<iostream.h>
 2 #include<stdlib.h>
 3 int main()
 4 {
 5     int num;
 6     int count=0; 
 7     int flog=1; 
 8     int low=0;
 9     int now=0;
10     int high=0;
11     cout<<"请输入数字:   ";
12     cin>>num;
13     while (num/flog!=0)       
14     {
15         low=num-(num/flog)*flog;
16         now=(num/flog)%10;
17         high=num/(flog*10);
18         switch (now)
19         {
20         case 0:
21             count=count+high*flog;
22             break;
23         case 1:
24             count=count+high*flog+low+1;
25             break;
26         default:
27             count=count+(high+1)*flog;
28             break;
29         }
30         flog=flog*10;
31     }
32     cout<<num<<"中出现数字1的个数为:"<<count<<endl;
33     return 0;
34 }

四:实验截图

五、实验总结

    这节课所学最大的地方就是找规律。越来越感觉计算机其实就是机械化的数学。在寻找模型、组合算法的过程中其实就是列方程、解题的过程。通过对数学模型的整理、来实现程序的实现。

转载于:https://www.cnblogs.com/fan123/p/4469424.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值