p1410.pas
来自「高手写的所有acm例程 在acm.zju.edu.cn 上的题目的例程」· PAS 代码 · 共 100 行
PAS
100 行
PROGRAM p2273;
{$APPTYPE CONSOLE}
VAR
part :longint;
n :longint;
i :longint;
pos :array[1..99999]of int64;
FUNCTION wei(n :longint):int64;
begin
if n<=9 then wei:=n
else if n<=99 then wei:=9+(n-9)*2
else if n<=999 then wei:=189+(n-99)*3
else if n<=9999 then wei:=2889+(n-999)*4
else if n<=99999 then wei:=38889+(n-9999)*5
else if n<=999999 then wei:=488889+(n-99999)*6
else if n<=9999999 then wei:=5888889+(n-999999)*7
else if n<=99999999 then wei:=68888889+(n-9999999)*8
else if n<=999999999 then wei:=788888889+(n-9999999)*9
end;
procedure main;
var
i :longint;
sum :int64;
begin
sum:=0;
pos[1]:=1;
for i:=1 to 31268 do
begin
sum:=sum+wei(i);
pos[i+1]:=sum+1;
end;
end;
PROCEDURE ans;
var
p :longint;
last :longint;
i :longint;
num :longint;
begin
num:=1;
while pos[num]<=n do inc(num);
p:=n-pos[num-1]+1;
if p<=9 then
write(p) else
begin
if p<=189 then
begin
last:=((p-10)div 2) +10;
case (p+1) mod 2 of
0 :write(last mod 10);
1 :write(last div 10);
end;{case}
end
else
if p<=2889 then
begin
last:=((p-190) div 3)+100;
case (p+1) mod 3 of
1 :write(last mod 10);
0 :write((last div 10) mod 10);
2 :write(last div 100);
end;
end else
if p<=38889 then
begin
last:=((p-2890)div 4)+1000;
case p mod 4 of
1 :write(last mod 10);
0 :write((last div 10) mod 10);
3 :write((last div 100) mod 10);
2 :write(last div 1000);
end;
end else
begin
last:=((p-38890)div 5)+10000;
case p mod 5 of
0 :write(last div 10000);
1 :write((last div 1000)mod 10);
2 :write((last div 100)mod 10);
3 :write((last div 10) mod 10);
4 :write((last mod 10));
end;
end;
end;
writeln;
end;
BEGIN
main;
readln(part);
for i:=1 to part do
begin
readln(n);
ans;
end;
END.
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?