题目

  • 格式:doc
  • 大小:148.50 KB
  • 文档页数:25

原题是求一个整数的乘积根一个正整数的数字的乘积的定义为:这个整数中非零数字的乘积。

例如,整数999的数字乘积为9*9*9,即729;729的数字乘积为7*2*9,即126;126的数字乘积为1*2*6,即12;12的数字乘积为1*2,即2.一个正整数的数字乘积根是这样得到的:反复取该整数的数字乘积,直到得到一位数字为止。

例如,999的数字乘积根是2。

要求编写程序,求一个正整数n(n≤10的1000此方)的数字乘积根。

我同学的程序AC了,但我有些看不懂,烦各位帮我解释一下这个程序的算法以及每一个变量是干嘛的,谢谢!附程序:program root(input,output);vara:array[1..1000] of integer;s:ansistring;function f(s:string):string;vari,j,d,c,t,u:integer;begina[1]:=1;d:=1;for i:= 1 to length(s) dobeginu:=ord(s[i])-48;if u=0 then continue;c:=0;for j:= 1 to d dobegint:=a[j]*u+c;a[j]:=t mod 10;c:=t div 10;end;while c <> 0 dobegind:=d+1;a[d]:=c mod 10;c:=c div 10;end;end;setlength(s, d);for i:=d downto 1 dos[d-i+1]:= chr(a[i]+48);f:=s;end;begin {main}assign(input,'root.in');assign(output,'root.out');reset(input);rewrite(output);readln(s);while length(s) > 1 dos:=f(s);writeln(s);close(input);close(output);end.提问者:jsyzyzmhy - 五级最佳答案{由于数据上限为10^1000,必须用高精度法} program root(input,output);vara:array[1..1000] of integer;s:ansistring;function f(s:string):string;var i,j,d,c,t,u:integer;begina[1]:=1;d:=1;for i:= 1 to length(s) dobeginu:=ord(s[i])-48;//取每一位的数字if u=0 then continue;c:=0;//存放进位{高精度乘法}for j:= 1 to d dobegint:=a[j]*u+c;//存放每位乘积a[j]:=t mod 10;//将乘积个位存储c:=t div 10;//进位end;{补足位数}while c <> 0 dobegind:=d+1;a[d]:=c mod 10;c:=c div 10;end;end;setlength(s, d);for i:=d downto 1 dos[d-i+1]:= chr(a[i]+48);//把结果存入字串f:=s;end;begin {main(原程序的输入输出有问题我更改了一下)} assign(input,'root.in');reset(input);readln(input,s);close(input);while length(s) > 1 dos:=f(s);assign(output,'root.out');rewrite(output);writeln(output,s);close(output);end.//经测试可通过pascal程序分析题阅读程序,并写出程序正确的运行结果1、Program t1;function ACK(M,N:integer):integer;beginif M=0 then ACK:=N+1else if N=0 then ACK:=ACK(M-1,1)else ACK:=ACK(M-1,ACK(M,N-1))end;beginwriteln(ACK(2,5));end.程序运行的结果是:2、Program t2;var n,i,j:Longint;s:Array [1..100] of integer;beginreadln(n);i:=0;Repeatinc(i); if odd(n) then s[i]:=1 else s[i]:=0;n:=n SHR 1;Until n=0;for j:=i downto 1 do write(s[j]);writeln; end.输入:2004程序运行的结果是:3、program t3;var a,b,f:integer;function gd(m,n:integer):integer;beginif n=0 then gd:=melse gd:=gd(n,m mod n);end;beginreadln(a,b);write(‘(‘,a,’,’,b,’)=’);f:=gd(a,b);writeln(f)end.输入: 172 16程序运行的结果是:4、program t4;constn=6;m=3;vari,j,k:integer;beginfor i:=-n to n dobegink:=n-abs(i);write(' ': 39-k);for j:=-k to k doif abs(j)>k-mthen write(n-(i+n)div 2)else write(' ');writeln;end.程序运行的结果是:5、PROGRAM exarm( output);V AR x,y,z:integer;PROEDURE silly(x:integer;V AR y:integer);BEGINx:=5;y:=6;z:=3;writeln(x,y,z)END;BEGINx:=1;y:=2;z:=3;silly(x,y);writeln(x,y,z)END.输出结果为:6、有下面程序段FOR I:=1 TO 3 DOBEGINFOR J:=1 TO 3 DOBEGINIF I=3 THEN A[I,J]:=A[I-1,A[I-1,J]]+1ELSE A[I,J]=J;WRITE(A[I,J]:2)END;WRITELNEND该程序的执行结果是:7、PROGRAM TEST(INPUT,OUTPUT);V AR A,B,C:INTEGER;PROCEDURE P(V AR X:INTEGER;Y:INTEGER);V AR M,N:INTEGER;BEGINM:=X*Y;X:=X+5;Y:=Y+5;N:=X*Y;WRITELN(M:4,N:4)END;A:=3;B:=3;P(A,B);P(A,B)END运行结果为:8、PROGRAM EXAM(INPUT,OUTPUT);V AR A:ARRAY[1..6] OF INTEGER;I,J,K:INTEGER;BEGINFOR I:=1 TO 6 DOREAD(A[I]);READLN;FOR I:=1 TO 6 DOBEGINIF I=1 THEN K:=1ELSE K:=8-I;FOR J:=1 TO 6 DOBEGINWRITE(A[K]:2);IF K=6 THEN K:=1ELSE K:=K+1;END;WRITELNENDEND输入:81425 6输出结果为:9. program text1;begina[1]:=1;t:=0;for i:=2 to 6 dobegins:=0;for j:=1 to i-1 dos:=s+a[j];a[i]:=s+1;end;for i:=1 to 6 dot:=t+a[i];writeln(‘t=’,t);end.运行结果为:10. PROGAM text2;V AR a:ARRAY[1..10] OF Char;k:Integer;ch:Char;BEGINFOR k:=1 TO 10 DO a[k]:=Chr(Ord('A')+k);FOR k:=1 TO 10 DOBEGINch:=a[k];a[k]:=a[11-k];a[11-k]:=ch;END;FOR k:=1 TO 10 DO Write(a[k]);WritelnEND.输出的结果为:11. program text3(input,output);V ar m,n,p:integer;x:real;procedure mm(var m:integer;x:real);var n:integer;beginm:=m+1;n:=m+1;x:=n*3;p:=n;end;beginm:=8;n:=5;p:=3;x:=1.0;mm(n,x);writeln (m:5,n:5,p:5,x:6:1);end.输出的结果为:12. program text4;const n=5;type ary=array[0..n-1,0..n-1]of integer;var a:ary;i,j,k:integer;beginfor i:=0 to n-1 dofor j:=0 to n-1 do a[i,j]:=0;k:=1;for i:=1 to n dofor j:=n-1 downto i dobegina[j,j-i]:=k;k:=k+1;end;for i:=0 to n-1 dobeginfor j:=0 to n-1 dowrite(a[I,j]:4);writeln;end;end.输出的结果为:13.program text5(input,output);var ch:char;i,n,sum:integer;begin sum:=0;read(ch);case ch of'A':for i:=4 to 6 dobeginread(n):sum:=sum+nend;'B':begin read(n);for i:=1 to n dobegin read(n);sum:=sum+n end;end;'C':repeatread(n);sum:=sum+nuntil sum>10;'D':begin read(n);while n<=3 dobegin sum:=sum+n;read(n) end endend;writeln(sum:4)end.当程序运行(1) 输入A4123456789时,输出为____________。