题解 | 无限长正整数排列字符串
无限长正整数排列字符串
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;
}
}
}
查看1道真题和解析