当前位置:编程学习 > C/C++ >>

输入一个正整数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++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,