回 帖 发 新 帖 刷新版面

主题:同构数的pascal程序哪错了???

program tonggoushu(input,output);
   var
     a,b,x,y,z,p:integer;
   begin
     writeln('please input a(a<=100)');
     read(a);
   if a>100
     then writeln('Please input one smaller number.');
     b:=a*a;
     x:=0;
     y:=0;
     z:=0;
     p:=0;
   if (b div 1000)>0 
      then
     x:=b div 1000;
     y:=b div 100 mod 10;
     p:=b div 10 mod 100;
     z:=b mod 10;
   if (b div 1000)=0 
  then
     x:=b div 100;
     y:=b div 10 mod 10;
     z:=b mod 10;
   if a=(y*100+p*10+z) or (p*10+z) or (z)
   then writeln('yes')
   else writeln('no');
  readln;
 readln;
end.
本人初学pascal,请各大虾帮帮忙!!!

回复列表 (共5个回复)

沙发


虽然我不知道你说的同构数是什么意思,
但从你的程序中可看出几个我认为的错误.

首先在纠错上
writeln('please input a(a<=100)');
     read(a);
   if a>100
     then writeln('Please input one smaller number.');
应改为
  repeat
     writeln('please input a(a<=100)');
     read(a);
     if a>100
     then writeln('Please input one smaller number.');
  until a<100;

其次在用IF判断的时候如
if (b div 1000)>0 
then
     x:=b div 1000;
     y:=b div 100 mod 10;
     p:=b div 10 mod 100;
     z:=b mod 10;
if (b div 1000)=0 
then
     x:=b div 100;
     y:=b div 10 mod 10;
     z:=b mod 10;
这之间都应该用begin与end括起来
因为条件成立时都执行,而不成立时都不执行
所以应该为
if (b div 1000)>0 
then begin
     x:=b div 1000;
     y:=b div 100 mod 10;
     p:=b div 10 mod 100;
     z:=b mod 10;
end;
if (b div 1000)=0 
then begin
     x:=b div 100;
     y:=b div 10 mod 10;
     z:=b mod 10;
end;

然后最后的
 readln;
 readln;
只用一个就够了.
基本上就这些吧!

[fly]学习pascal就应有刻苦精神............[/fly]

板凳

还有一点错误漏了
if a=(y*100+p*10+z) or (p*10+z) or (z)
   then writeln('yes')
   else writeln('no');
这里if 不能这样用啊!
改为
if (a=y*100+p*10+z) or (a=p*10+z) or (a=z)
就好了

3 楼

同构数是:
比如5的平方是25,25尾数包含5,即5是同构数。同样,25平方625,625平方390625,则25、625均为同构数。
多谢楼上了!!!

4 楼

[em1]

5 楼

我说点无关的: n位同构数的后n-1位就是n-1位同构数.

我来回复

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