输入一个正整数n,计算出1~n之间出现1的次数
[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).
补充:软件开发 , C++ ,