关于有多少个1的计算
1、題目
輸入一個(gè)十進(jìn)制的數(shù),輸出
??? (1)、給定n,求出從1到n的所有整數(shù)中1的個(gè)數(shù)。(暫用用f(n)表示)
??? (2)、求滿足n=f(n)的最小整數(shù)(1除外)。
#include <iostream>?
#include <math.h>?
using namespace std;?
?
void solve();?
int input();?
int power(int count);?
void main(){?
??? solve();?
??? system("pause");?
}?
?
void solve(){?
??? int n,count=0,i,sum=0;?
??? n=input();?
??? //count為一個(gè)計(jì)數(shù)的,來計(jì)算n是幾位數(shù),如1則為個(gè)位數(shù),2則為百位數(shù)?
??? i=n;?
??? while(i){?
??????? i=i/10;?
??????? count++;?
??? }?
??? while(count--){?
??????? i=(n/power(count))%10;//提取了與count對應(yīng)的位?
??????? cout<<i<<endl;?
??????? if(i==1){?
??????????? if(0==count)//如果對應(yīng)個(gè)位?
??????????????? sum+=1;?
??????????? else?
??????????????? sum+=n%power(count)+1;?
??????? }?
??????? else if(i>1){?
??????????? sum+=power(count);?
??????? }?
??????? sum+=n/power(count+1)*power(count);?
??? }?
??? cout<<"一個(gè)有"<<sum<<"個(gè)1"<<endl;?
}?
?
int input(){?
??? cout<<"請輸入您想要輸入的數(shù)字:"<<endl;?
??? int n;?
?cin>>n;
?return? n;
}
?
int power(int count){?
??? int m=1;?
??? if(count<0){?
??????? cout<<"count值有誤!"<<endl;?
??????? return -1;?
??? }?
??? else?
??????? while(count--)?
??????????? m*=10;?
??? return m;?
}
?
把每個(gè)位置上的數(shù)都分離出來,先確定是幾位數(shù),然后在利用每個(gè)位置上的數(shù)求得出現(xiàn)多少個(gè)1 。
總結(jié):要學(xué)會變換思路,以前的時(shí)候通過列舉找規(guī)律,遇到這個(gè)問題的時(shí)候例句明顯太麻煩了,而且很難找到規(guī)律,可以找一個(gè)數(shù)來拆解。
轉(zhuǎn)載于:https://www.cnblogs.com/jump/p/4548435.html
總結(jié)
以上是生活随笔為你收集整理的关于有多少个1的计算的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SCOM数据库整理索引计划出错
- 下一篇: 梦到捡钱打什么码