有趣的乘法:输入一个个位数不是5的奇数p,寻找一个整数s,使得p×s = 1111...1(每位数字均为1),要求输出整数s及它们乘积中1的个数(即乘积有几个1构成)。例如,当p=13时,13*8547=111111,因此整数s为8547,乘积由6个1构成;当p=23时,整数s为48309178743961352657,乘积由22个1构成。
算法思想:
首先生成一个比p大的全1数a,如果a能整除p,则算法结束,否则继续扩大a的位数,如此继续,直至a整除p。
程序运行界面如下图所示,在文本框Text1中输入整数p,单击“计算”按钮,在文本框Text2中输出整数s,在文本框Text3中输出乘积中1的个数。
小明依据上述描述设计如下VB程序。请回答下列问题:
(1)
当p=3时,整数s为。
(2)
请在划线处填入合适的语句。
Private Sub Command1_Click()
Dim p As Long, a As Long, b As Long, c As
Long, n As Long
Dim s As String '存放整数s,因为该数较大,因此采用字符串存储
Do While True '判断输入的整数p是否为个位不是5的奇数
p = Val(Text1.Text)
If p Mod 2 < > 0 And p Mod 5 < >
0 Then Exit Do
Loop
a = 0
n = 0
Do While a < p
n = n
+ 1
Loop
c = a Mod p
s = Str(a \ p)
Do While c < > 0
a = c
* 10 + 1
s = s
& b
n = n
+ 1
Loop
Text2.Text = s
Text3.Text = Str(n)
End Sub
答案: 【1】37
【1】a = a * 10 + 1【2】b = a \ p【3】c = a Mod p或c=a-b*p