关于有多少个1的计算
1、题目
输入一个十进制的数,输出
(1)、给定n,求出从1到n的所有整数中1的个数。(暂用用f(n)表示)
(2)、求满足n=f(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;
return n;
}
int power(int count){
int m=1;
if(count<0){
cout<<"count值有误!"<<endl;
return -1;
}
else
while(count--)
m*=10;
return m;
}
把每个位置上的数都分离出来,先确定是几位数,然后在利用每个位置上的数求得出现多少个1 。
总结:要学会变换思路,以前的时候通过列举找规律,遇到这个问题的时候例句明显太麻烦了,而且很难找到规律,可以找一个数来拆解。