#include <stdio.h>
#include <string.h>
int main()
{
int n=0;
scanf("%d",&n);
char num1[2000]="";
char num2[1000]={0};
for(int i=1;strlen(num1)<n;i++)
{
sprintf(num2,"%d",i);
strcat(num1,num2);
}
printf("%c",num1[n-1]);
return 0;
} #include <iostream>
#include <string>
using namespace std;
int findNthDigit(int n) {
int digit = 1; // 当前数字的位数
long start = 1; // 当前位数范围的起始数字
long count = 9; // 当前位数范围的数字总字符数
// 1. 确定数字的位数
while (n > count) {
n -= count;
digit += 1;
start *= 10;
count = 9 * start * digit;
}
// 2. 确定具体的数字
long num = start + (n - 1) / digit;
// 3. 确定数字中的具体字符
return to_string(num)[(n - 1) % digit] - '0';
}
int main() {
int n;
cin >> n;
cout << findNthDigit(n) << endl;
return 0;
} #include<stdio.h>
#include<string.h>
int main(void)
{
int n;
char a[10000] = {0}; // 初始化数组为0,避免随机值
scanf("%d",&n);
int pos = 0; // 记录当前拼接的字符位置(从0开始,符合数组下标)
for(int i=1; ;i++){ // 无限循环,直到拼接长度≥n再退出
// 处理当前整数i的每一位,转成字符拼接到a中
char temp[10]; // 临时存储单个整数转成的字符串(比如i=10→temp="10")
sprintf(temp, "%d", i); // 关键:把整数i转成字符串(自动处理多位数)
// 把temp中的字符逐个拼接到a的pos位置
for(int j=0; temp[j]!='\0'; j++){
a[pos++] = temp[j];
// 拼接一个字符就检查一次,长度≥n直接退出所有循环
if(pos >= n) goto end; // goto快速退出,新手易理解
}
}
end:
// 数组是0索引,第n个字符对应a[n-1]
printf("%c\n", a[n-1]);
return 0;
} 这个重点在于掌握sprintf的用法,当然,大家如果有兴趣的话还可以去了解sscanf的高级用法,掌握之后对于写某类题帮助挺大的#include <stdio.h>
int main() {
int n,a[1000] = { 1,2,3,4,5,6,7,8,9,1,0,1,1,1,2,1,3,1,4,1,5,1,6,1,7,1,8,1,9,2,0,2,1,2,2,2,3,2,4,2,5,2,6,2,7,2,8,2,9,3,0,3,1,3,2,3,3,3,4,3,5,3,6,3,7,3,8,3,9,4,0,4,1,4,2,4,3,4,4,4,5,4,6,4,7,4,8,4,9,5,0,5,1,5,2,5,3,5,4,5,5,5,6,5,7,5,8,5,9,6,0,6,1,6,2,6,3,6,4,6,5,6,6,6,7,6,8,6,9,7,0,7,1,7,2,7,3,7,4,7,5,7,6,7,7,7,8,7,9,8,0,8,1,8,2,8,3,8,4,8,5,8,6,8,7,8,8,8,9,9,0,9,1,9,2,9,3,9,4,9,5,9,6,9,7,9,8,9,9,1,0,0,1,0,1,1,0,2,1,0,3,1,0,4,1,0,5,1,0,6,1,0,7,1,0,8,1,0,9,1,1,0,1,1,1,1,1,2,1,1,3,1,1,4,1,1,5,1,1,6,1,1,7,1,1,8,1,1,9,1,2,0,1,2,1,1,2,2,1,2,3,1,2,4,1,2,5,1,2,6,1,2,7,1,2,8,1,2,9,1,3,0,1,3,1,1,3,2,1,3,3,1,3,4,1,3,5,1,3,6,1,3,7,1,3,8,1,3,9,1,4,0,1,4,1,1,4,2,1,4,3,1,4,4,1,4,5,1,4,6,1,4,7,1,4,8,1,4,9,1,5,0,1,5,1,1,5,2,1,5,3,1,5,4,1,5,5,1,5,6,1,5,7,1,5,8,1,5,9,1,6,0,1,6,1,1,6,2,1,6,3,1,6,4,1,6,5,1,6,6,1,6,7,1,6,8,1,6,9,1,7,0,1,7,1,1,7,2,1,7,3,1,7,4,1,7,5,1,7,6,1,7,7,1,7,8,1,7,9,1,8,0,1,8,1,1,8,2,1,8,3,1,8,4,1,8,5,1,8,6,1,8,7,1,8,8,1,8,9,1,9,0,1,9,1,1,9,2,1,9,3,1,9,4,1,9,5,1,9,6,1,9,7,1,9,8,1,9,9,2,0,0,2,0,1,2,0,2,2,0,3,2,0,4,2,0,5,2,0,6,2,0,7,2,0,8,2,0,9,2,1,0,2,1,1,2,1,2,2,1,3,2,1,4,2,1,5,2,1,6,2,1,7,2,1,8,2,1,9,2,2,0,2,2,1,2,2,2,2,2,3,2,2,4,2,2,5,2,2,6,2,2,7,2,2,8,2,2,9,2,3,0,2,3,1,2,3,2,2,3,3,2,3,4,2,3,5,2,3,6,2,3,7,2,3,8,2,3,9,2,4,0,2,4,1,2,4,2,2,4,3,2,4,4,2,4,5,2,4,6,2,4,7,2,4,8,2,4,9,2,5,0,2,5,1,2,5,2,2,5,3,2,5,4,2,5,5,2,5,6,2,5,7,2,5,8,2,5,9,2,6,0,2,6,1,2,6,2,2,6,3,2,6,4,2,6,5,2,6,6,2,6,7,2,6,8,2,6,9,2,7,0,2,7,1,2,7,2,2,7,3,2,7,4,2,7,5,2,7,6,2,7,7,2,7,8,2,7,9,2,8,0,2,8,1,2,8,2,2,8,3,2,8,4,2,8,5,2,8,6,2,8,7,2,8,8,2,8,9,2,9,0,2,9,1,2,9,2,2,9,3,2,9,4,2,9,5,2,9,6,2,9,7,2,9,8,2,9,9,3,0,0,3,0,1,3,0,2,3,0,3,3,0,4,3,0,5,3,0,6,3,0,7,3,0,8,3,0,9,3,1,0,3,1,1,3,1,2,3,1,3,3,1,4,3,1,5,3,1,6,3,1,7,3,1,8,3,1,9,3,2,0,3,2,1,3,2,2,3,2,3,3,2,4,3,2,5,3,2,6,3,2,7,3,2,8,3,2,9,3,3,0,3,3,1,3,3,2,3,3,3,3,3,4,3,3,5,3,3,6,3,3,7,3,3,8,3,3,9,3,4,0,3,4,1,3,4,2,3,4,3,3,4,4,3,4,5,3,4,6,3,4,7,3,4,8,3,4,9,3,5,0,3,5,1,3,5,2,3,5,3,3,5,4,3,5,5,3,5,6,3,5,7,3,5,8,3,5,9,3,6,0,3,6,1,3,6,2,3,6,3,3,6,4,3,6,5,3,6,6,3,6,7,3,6,8,3,6,9,3 };
scanf("%d", &n);
printf("%d", a[n - 1]);
return 0;
} Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); int temp=0; // 9 //10-189 //181 if(n<=9){ System.out.println(n); return; } if(n>9&&n<=189){ n=n-9; int shang=n/2; int yushu=n%2; if(yushu==1){ temp= 10+shang; System.out.println( temp/10); return; }else { temp=10+shang-1; System.out.println(temp%10); return; } } if(n>189){ n=n-189; int shang=n/3; int yushu=n%3; if(yushu==0){ temp= 100+shang-1; System.out.println(temp%10); return; }else if(yushu==1){ temp= 100+shang; System.out.println(temp/100); }else { temp= 100+shang; System.out.println(temp/10%10); } }
#include <stdio.h>
#include <string.h>
int main() {
int n;
char s[5000] = "";
scanf("%d", &n);
for (int i = 1; ; i++) {
char number[5];
sprintf(number, "%d", i);
strcat(s, number);
if (i == n) {
printf("%c", s[n - 1]);
break;
}
}
return 0;
} #include <stdio.h>
int main() {
int n=0;
scanf("%d",&n);
if(n<=9)
{
printf("%d",n);
}
else if(n<=189) //在两位区间
{
int pos=n-9;
int num=10+(pos-1)/2; //数字的序号
int ret=(pos-1)%2; //在一个数字中的位置,为0就是最高位,1第二位
if(ret==0)
printf("%d",num/10);
else
printf("%d",num%10);
}
else { //在三位区间
int pos=n-189;
int num=100+(pos-1)/3;
int ret=(pos-1)%3;
if(ret==0)
printf("%d",num/100);
else if(ret==1)
printf("%d",num/10%10);
else
printf("%d",num%10);
}
return 0;
}