求字串1 12 123 1234 12345 123456 1234567 12345678 123456789 12345678910 ...(不带空格)中第 i 位的数字
1<=i<=2147483647
最好有PASCAL的程序 或者 详解
求字串1 12 123 1234 12345 123456 1234567 12345678 123456789 12345678910 ...(不带空格)中第 i 位的数字
1<=i<=2147483647
最好有PASCAL的程序 或者 详解
我没写完,剩下的一点很简单的。(2147483647,刚好在长整型的范围。用空格隔开的算一节) read(i); for a:=1to i do begin case a of 1..9:t:=t+1; 10..99:t:=t+2; 100..999:t:=t+3; 1000..9999:t:=t+4; 10000..99999:t:=t+5; {......太懒了,没留意要多少行才够。第a节有t个数字} end; s:=s+t;{到 第a节 共有s个数字} if s>=i {第a节最后一个数字是 i 或在 i 后面}then break;
end; s:=s-t; k:=i-s; 经过以上程序,可以确定第i个数字是第a节的第k个。于是我不写下去了。
都看懂了吗?
其实很简单,只是需要一个数判断,用一个while循环,
具体我没写程序,这是我的主要思想:
k:=1;j:=1;
while k<=i do
begin
j:=j+1;
k:=k+j;
end;
//记住longint范围是不够,最好使用int64来开K,J
然后就是判断,用j-(k-i),再输出J,就可以了,大概是这个意思把,应该不会超时。
程序我马上写