数1 游戏
一、題目:
??給定一個十進制的正整數,寫下從1開始,到N的所有整數,然后數一下其中出現“1”的個數。要求: 1.寫一個函數 f(N) ,返回1 到 N 之間出現的“1”的個數。例如 f(12)? = 5。2.在32位整數范圍內,滿足條件的“f(N) =N”的最大的N是多少。
二.設計思想。
? 分別算出每一位上1出現的次數,再加起來就是總的次數。
三、源程序
#include<iostream.h>
#include<math.h>
int main()
{
??? int num,a[10],n,k,s=0,b,c;
??? //double b,c;
??? cout<<"請輸入輸入數字的位數:"<<endl;
??? cin>>n;
??? cout<<"請輸入數字:"<<endl;
??? cin>>num;
??? cout<<endl;
??? k=num;
??? for(int i=0;i<n;i++)
??? {
??????? a[i]=num%10;
??????? num=num/10;
??? }
??? for(i=0;i<n;i++)
?? ?{
??????? if(a[i]>1)
??????? {
??????????? b=pow(10,(i+1));
??????????? c=pow(10,i);
??????????? s=s+(k/b+1)*c;
??????????? //cout<<a[i]<<" "<<s<<endl;
??????? }
??????? else if(a[i]==1)
??????? {
??????????? b=pow(10,(i+1));
??????????? c=pow(10,i);
??? ????????s=s+k/b*c+k%c+1;
??????????? //cout<<a[i]<<" "<<k/b*c<<" "<<k%c<<" "<<s<<endl;
??????? }
??????? else
??????? {
??????????? b=pow(10,(i+1));
??????????? c=pow(10,i);
??????????? s=s+k/b*c;
??????????? //cout<<a[i]<<" "<<s<<endl;
??????? }
??? }
??? cout<<"從0到"<<k<<"中1的個數為:"<<endl;
??? cout<<s<<endl;
??? return 0;
}
四、結果截圖
?
五、實驗總結
???這次實驗比較簡單,但主要是找規律,先找出規律,寫算法。以后在實驗時也要多想一些不同算發法。
?
轉載于:https://www.cnblogs.com/weaponx/p/4583111.html
總結
- 上一篇: libcurl教程
- 下一篇: C语言及程序设计进阶例程-32 位运算及