回 帖 发 新 帖 刷新版面

主题:帮我看看到底哪里错了

题目:
数列:12345678910111213...........
输入是一个数n,表示求数列的第n位
1<=n<=10^8 
输出第n位上的数

样例:
输入:33
输出:1

我编的代码:
const a:array[1..8] of longint=(9,189,2889,38889,488889,5888889,68888889,788888889);
      power:array[1..8] of longint=(1,10,100,1000,10000,100000,1000000,10000000);
var ans,i,n,x,y:longint;
begin
     readln(n);
     i:=1;
     while n>a[i] do
           inc(i);
     if n=a[i-1]
        then writeln('9')
        else
             begin
                  x:=((n-a[i-1]) div i)+a[i-1];
                  y:=(n-a[i-1]) mod i;
                  if y=0
                     then writeln(x mod 10)
                     else
                          begin
                               inc(x);
                               ans:=(x mod power[i-y+2]) div power[i-y+1];
                               writeln(ans);
                          end;
             end;
end.

我用自己的数据试验都对的,但测试机测下来答案都错的,帮忙看看是哪儿不对

回复列表 (共3个回复)

沙发

可能是常数表做错了吧,
我自己算的:
 a:array[1..8] of longint=(9,189,2619,32139,371439......);

板凳

不是吧,我这样算的,a[i]:=9*power[i]*i+a[i-1],求的是长度为i的所有的数的总长度

3 楼

我已经做出来了

我来回复

您尚未登录,请登录后再回复。点此登录或注册