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