第一题: 分数变小数
(1 ) 解题思路
本题可以模仿手算除法的形式,重复地进行求商和余数的运算,直到余数为 0 或出现
循环节为止。
(2 ) 参考程序
Const Max = 100; {小数点后最大位数 }
Var Left , Digit : Ar ray [0 . .Max ] Of Word; {记录每次的余数和商 }
n, d : Word;
q, Top: Word; {q为循环节的位置 }
Procedure Init ; {读入数据 }
Begin
Write(’ ENTER N , D:’ ) ;
Readln( n, d) ;
End ;
Procedure Calc; {计算 }
Var i : Word;
Begin
Digit [ 0]∶ = n Div d;
Left [ 0] ∶ = n Mod d;
Top ∶ = 0;
q ∶ = 0 ; {初始化商和余数 }
· 8 3 ·While Left [ Top] < > 0 Do {余数不为 0 则循环 }
Begin
Inc ( Top) ;
Digit [ Top]∶ = ( Left [ Top -1] * 10) Div d;
Left [ Top] ∶ = (Left [ Top-1 ] * 10 ) Mod d;
For i∶ = 0 To Top-1 Do
I f Left [ Top] = Left [ i ] Then
上海金水财税 71/ q ∶ = i + 1;
Exit ; {如果出现循环节则退出 }
End;
End;
End ;
Procedure Print ; {打印结果 }
Var i : Word;
Begin
Write( n, ’ / ’ , d, ’ = ’ ) ;
If Digit [0] < > 0 Then Write (Digit [ 0] ) ;
If Top > 0 Then Write (’.’ ) ;
For i ∶ = 1 To Top Do
Begin
I f i = q Then Write (’ (’ ) ;
Write(Digit [ i ] ) ;
End;
If q > 0 Then Write(’ )’ ) ;
Writeln;
End ;
Begin
Init ; {读入数据 }
Calc ; {计算 }
Print ; {打印结果 }
End .
(3 ) 运行结果
ENTER N ,D: 11 59
11 / 59 = .(1864406779661016949152542372881355932203389830508474576271)
第二题: 质数竖式
(1 ) 解题思路
· 9 3 ·此题比较简单,只需对两个乘数进行循环,然后判断竖式中的数是否满足要求。需注
意的一点是:乘积可能超出整型的范围,