# 1-1统计数字问题

1-1统计数字问题

代码如下:

#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
int ans[10];
int zeros[10];
int tmpans[10];
int tmpn[10];
int func(int rank){
	return rank*pow(10,rank-1);
}
void count(int n){
	int rank=log10(n);
	int store_rank=rank;
	int zero=zeros[rank];
	int level=n/pow(10,rank);
	if(rank==0){
		int temp=func(rank+1);
		for(int i=1;i<=n;i++){
			ans[i]=temp;
		}
	}
	else{
		int temp=func(rank);
	    temp=temp*level;
	    for(int i=0;i<10;i++){
		    ans[i]=temp;
	    }
	    for(int j=0;j<level;j++){
		    ans[j]+=pow(10,rank);
	    }
	    int tmp;
	    int count=0;
	    tmpans[count]=level;
	    while(rank>0){
		    n=(n-level*pow(10,rank));
		    level=n/pow(10,rank-1);
		    rank-=1;
		    tmp=func(rank);
		    tmp=level*tmp;
		    for(int i=0;i<10;i++){
		        ans[i]+=tmp;
	        }
	        for(int j=0;j<level;j++){
		        ans[j]+=pow(10,rank);
	        }
	        tmpn[count]=n+1;
	        count++;
	        tmpans[count]=level;
	    }
	    tmpn[store_rank]=1;
	}
	for(int i=store_rank;i>=0;i--){
		int number=tmpans[i];
		ans[number]+=tmpn[i];
		
	}
	if(store_rank>0){
		ans[0]-=zero;
	}
	for(int i=0;i<10;i++){
		cout<<i<<":"<<ans[i]<<endl;
	}
}
int main(){
	for(int i=0;i<10;i++){
	    if(i==0){
	    	zeros[i]=pow(10,i);
		}
		else{
			zeros[i]=zeros[i-1]+pow(10,i);
		}
	}
	int n;
	cin>>n;
	count(n);
	return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值