题解 | 无限长正整数排列字符串

无限长正整数排列字符串

https://www.nowcoder.com/practice/82c92d2321bb4220a3006d52a95a8bdd

题干解读:求在无限长正整数字符串中n位置的数

解题思路:应该采用是数学方法来计算而非采用字符串拼接的方法计算,

由于n<=1000,则可划分为3个区域,n<=9.10=<n<=189,190=<n<=100三个部分,分别对应1,2,3位数所在的区间.

小于9的部分直接输出即可;

9到189的部分需要先判断该数字所在的位置对应的是什么数,需要先减去10,得到相对于数字10的起始位置偏移量t,再将其除其数字位数2,得到偏移的数字的个数。先求出该数字,再将偏移量t对于其数字位数取余得到其所在数字位数的位置信息,最后输出即可。

190到1000部分原理同上,区别是起始位置为190,数字位数为3,不再赘述.

#include <iostream>
using namespace std;

int main() {
    int n;
    cin>>n;
    if(n<=9){
        cout<<n;
    }else if(n>9 && n<=189){
        int num = ((n-10)/2)+10;
        if((n-10)%2==0){
            cout<<num/10;
            
        }else{
            cout<<num%10;
        }
    }else if(n>=190){
        int num = ((n-190)/3)+100;
        if((n-190)%3==0){
            cout<<num/100;
        }else if((n-190)%3==1){
            cout<<(num/10)%10;
        }else if ((n-190)%3==2){
            cout<<num%10;
        }
    }
}

全部评论

相关推荐

01-27 15:41
门头沟学院 Java
想躺平的菜鸡1枚:我项目比你难、学历比你好、还有SCI论文,投java都被拒一大片,现在基本上都要问点agent开发
软件开发投递记录
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务