回 帖 发 新 帖 刷新版面

主题:Matodied,moz帮我看看

由键盘输入一个奇数 P (P<100,000,000),其个位数字不是  5,求一个整数 S,使 P×S =
 
1111...1 ( 在给定的条件下,解 S 必存在)。要求在屏幕上依次输出以下结果:
(1)S 的全部数字。除最后一行外,每行输出 50 位数字。  (2)  乘积的数字位数。 例 1:输入 p=13,由于 13*8547=111111,则应输出(1)8547,(2)6 例 2:输入 p=147,则输出结果应为(1)755857898715041572184429327286470143613
 
(2)42,即等式的右端有 42 个 1。

回复列表 (共3个回复)

沙发

本题主要是考高精度除法的。

对于被除数是高精度,除数是整数的除法,可以按手算除法的方法来进行:
首先,a$为被除数,n为除数,i为目前的指针。
(1)取a$的第i个1,加到b$里,i=i+1,直到VAL(b$)>n。
(2)计算VAL(b$)/n的商和余数,商加到c$里,余数保存在b$里,转(1)。
(3)若i>=LEN(a$)则计算结束:
     1、若在执行(1)的过程中i>LEN(a$),则表示a$不能被n整除,计算失败。
     2、若执行(2)后i=LEN(a$),并且b$="0",则计算成功,c$就是S,否则计算失败。

板凳

程序:
DECLARE SUB div (a$, n!)
CLS
DIM SHARED c$, t
INPUT p
k = 0
DO
  k = k + 1
  a$ = STRING$(k, "1")
  IF a$ = LTRIM$(STR$(p)) THEN t = -1: c$ = "1" ELSE CALL div(a$, p)
  IF t THEN
     FOR i = 1 TO LEN(c$)
         PRINT MID$(c$, i, 1);
         IF i MOD 50 = 0 THEN PRINT
     NEXT i
     PRINT
     PRINT LTRIM$(STR$(LEN(a$)))
     END
  END IF
LOOP
END

SUB div (a$, n)
i = 0: c$ = ""
1 DO
  i = i + 1
  IF i <= LEN(a$) THEN
     b$ = b$ + "1"
  ELSE
     t = 0: EXIT SUB
  END IF
LOOP UNTIL VAL(b$) > n
k1 = VAL(b$) / n: k2 = VAL(b$) - INT(k1) * n
c$ = c$ + LTRIM$(STR$(INT(k1))): b$ = LTRIM$(STR$(k2))
IF i = LEN(a$) THEN
   IF b$ = "0" THEN t = -1: EXIT SUB ELSE t = 0: EXIT SUB
END IF
GOTO 1
END SUB

3 楼

谢谢

我来回复

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