问题 L: 毛遂自荐2

题目描述

楚王想知道,没有前导零的从1 11到N NN的十进制数中,有多少个数的位数是奇数。

  • 1 11有1 11位
  • 9 99有1 11位
  • 10 1010有2 22位
  • 123 123123有3 33位

此时有名毛遂者,自荐以解此题。

输入格式

.

输入包括1 11行1 11个整数N NN

数据范围:

  • 1 ≤ N ≤ 1 0 5 1leq Nleq 10^51≤N≤105
输出格式

.

输出1 11行1 11个整数,代表1 11到N NN中,有多少个数的位数是奇数

例如从1 11到136 136136这136 136136个数,1 , 2 , ⋯ 9 1,2,cdots91,2,⋯9有1 11位(9个),100 , 101 , ⋯   , 136 100,101,cdots,136100,101,⋯,136有3 33位(37个),因此共有46 4646个数的位数是奇数。

输入样例 复制
136
输出样例 复制
46

完整代码

非常朴实无华的解法啊!

#include<bits/stdc++.h>
using namespace std;

int main(){
    //freopen("/config/workspace/test/test","r",stdin);
    int n;
    cin>>n;
    int a[3]={9,900,90000};
    int count=0;
    if(n>=1&&n<=9){
    	count=n;
	}else if(n>=10&&n<=99){
		count=9;
	}else if(n>=100&&n<=999){
		count=9+n-99;
	}else if(n>=1000&&n<=9999){
		count=9+900;
	}else if(n>=10000&&n<=99999){
		count=9+900+n-9999;
	}else if(n==100000){
		count=9+900+90000;
	}
    cout<<count<<endl;

    return 0;
}

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值