[cpp] //要求:輸入一個正整數n,計算出1~n之間出現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為一個計數的,來計算n是幾位數,如1則為個位數,2則為百位數 i=n; while(i){ i=i/10; count++; } while(count--){ i=(n/power(count))%10;//提取了與count對應的位 cout<<i<<endl; if(i==1){ if(0==count)//如果對應個位 sum+=1; else sum+=n%power(count)+1; } else if(i>1){ sum+=power(count); } sum+=n/power(count+1)*power(count); } cout<<"一個有"<<sum<<"個1"<<endl; } int input(){ cout<<"請輸入您想要輸入的數字:"<<endl; int n; cin>>n; if(cin.fail()){ cout<<"您輸入有誤!"<<endl; exit(-1); } return n; } int power(int count){ int m=1; if(count<0){ cout<<"count值有誤!"<<endl; return -1; } else while(count--) m*=10; return m; } 編程之美的題目用我的方式編寫出來,很少看源程序,最多看看思路。復雜度為O(n).