Сумма двух 100-значных чисел - QBasic

Формулировка задачи:

REM Программа суммирует два числа длиной до 100 знаков
REM Иначе говоря A()+B()=C()
REM Порядок чисел хранится в A(0), B(0), C(0)
REM стандартный вид числа 1234.567 таков 1.234567 (порядок=3)
 
DEFINT A-C, E, I
DIM a(100)
DIM b(100)
DIM c(100)
CLS
ERASE c ' инициализация массива c()
e=a(0)-b(0)
IF e=0 THEN
    c(0)=a(0)
    GOTO 11
END IF
REM числа перед сложением выравниваются
REM меньшее число смещается вправо
IF e>0 THEN
    c(0)=a(0)
    FOR i=100-e TO 1 STEP -1
        b(i+e)=b(i)
    NEXT i
    FOR i=1 TO e
        b(i)=0
    NEXT i
ELSE
    e=-e
    c(0)=b(0)
    FOR i=100-e TO 1 STEP -1
        a(i+e)=a(i)
    NEXT i
    FOR i=1 TO e
        a(i)=0
    NEXT i
END IF
 
11:   ' поразрядное сложение
FOR i=1 TO 100
    c(i)=a(i)+b(i)
NEXT i
REM приведение результата к стандартному виду
FOR i=100 TO 2 STEP -1
    IF c(i)>9 THEN
        c(i)=c(i)-10
        c(i-1)=c(i-1)+1
    END IF
NEXT i
IF c(1)>9 THEN
    c(0)=c(0)+1
    FOR i=100 TO 3 STEP -1
        c(i)=c(i-1)
    NEXT i
    c(2)=c(1)-10
    c(1)=1
END IF
STOP
END

Код к задаче: «Сумма двух 100-значных чисел - QBasic»

textual
'
#Lang "FB"       ' режим FreeBASIC-совместимости
'
Dim As String s1, s2, S
Dim As Integer i, sum, p
' заданные значения операндов
s1 = "1234567890"
s2 = "999997777744443333222"
' 
Do Until Len(s1) = Len(s2) ' выполнять до выравнивание
   If Len(s1) > Len(s2) Then
      s2 = "0" + s2        ' добавить ведущий нуль
   Else
      s1 = "0" + s1        ' добавить ведущий нуль
   End If
Loop
Print s1
Print s2
'
p = 0        ' поразрядное сложение (перенос отсутствует)
For i = Len(s1) To 1 Step -1
   sum = Val(Mid(s1, i, 1)) + Val(Mid(s2, i, 1)) + p
   If sum > 9 Then
      sum = sum - 10
      S = LTrim(Str(sum)) + S
      p = 1  ' перенос есть
   Else
      S = LTrim(Str(sum)) + S
      p = 0  ' переноса нет
   End If
Next i
' 
Print
Print S
Sleep

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

8   голосов, оценка 4.250 из 5


СОХРАНИТЬ ССЫЛКУ