回 帖 发 新 帖 刷新版面

主题:acm1016问题!

pascal 语言
连接到:http://acm.tongji.edu.cn/problem.php
var
   n,i,j:longint;
   s:string;
begin
   while not eof do begin
     readln(n);
     j:=1;
     for i:=1 to n do j:=j*i;
     str(j,s);
     writeln(s[2]);
   end;
end.

为什么说我错了?

回复列表 (共9个回复)

沙发

很有可能是溢出了。

板凳

楼上说的很好!

这道题的思路如下:

1. 初始化变量 n = 0, m = 1;
2. n = n + 1, m = m * n, 如果 m > 100 则 m = (int)(m \ 10) 直到 m < 100, 重复 2;
3. 输出 m % 10.

3 楼

楼上wrong answer
用浮点数直接乘就可以了

4 楼

3 楼我那个怎么可能哇我就是那么过的……

5 楼

program tju1016;
const
  maxn=100000;
var
  ans:array[4..maxn]of byte;
  f:real;
  m,i,n:longint;
begin
  f:=6;
  for i:=4 to maxn do begin
    f:=f*i;
    while f>100 do f:=f/10;
    ans[i]:=trunc(f) mod 10;
  end;
  read(m);
  for i:=1 to m do begin
    read(n);
    writeln(ans[n]);
  end;
end.

=============================================
上面是这题的一种答案!
不知对你有没有用!

6 楼

THANK

7 楼

我一般去http://acm.zju.edu.cn做
那个网站不错啊。

8 楼

这道题目有一定难度.

9 楼

[2]    eof(x)
作用:判断文件x是否处于结束状态。其中x为文件型变量。文件结束为true,否则为false 。

我来回复

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