Длинная арифметика. Возведение в степень - QBasic
Формулировка задачи:
даны N и M (N,M >100;N,M <999 ) вычислить по формуле:
s=n^m+m^n
но только чтобы показала весь ответ
Решение задачи: «Длинная арифметика. Возведение в степень»
textual
Листинг программы
- ret$ = "1": lhs$ = "3": n = 100
- WHILE n
- IF n AND 1 THEN ret$ = mul$(ret$, lhs$)
- lhs$ = mul$(lhs$, lhs$): n = n \ 2
- WEND
- FOR i = 1 TO LEN(ret$)
- buf$ = MID$(ret$, i, 1) + buf$
- NEXT
- PRINT buf$
- FUNCTION mul$ (lhs$, rhs$)
- ret$ = STRING$(LEN(lhs$ + rhs$), "0")
- FOR i = 1 TO LEN(lhs$)
- j = 1: carry = 0
- WHILE j <= LEN(rhs$) OR carry
- a = VAL(MID$(lhs$, i, 1))
- IF j <= LEN(rhs$) THEN b = VAL(MID$(rhs$, j, 1)) ELSE b = 0
- cur = VAL(MID$(ret$, i + j - 1, 1)) + a * b + carry
- MID$(ret$, i + j - 1, 1) = LTRIM$(STR$(cur MOD 10))
- carry = cur \ 10: j = j + 1
- WEND
- NEXT
- mul$ = del$(ret$)
- END FUNCTION
- FUNCTION del$ (ret$)
- FOR i = LEN(ret$) TO 1 STEP -1
- IF MID$(ret$, i, 1) <> "0" OR LEN(buf$) <> 0 OR i = 1 THEN
- buf$ = MID$(ret$, i, 1) + buf$
- END IF
- NEXT
- del$ = buf$
- END FUNCTION
Объяснение кода листинга программы
В этом коде выполняется возведение в степень. Список действий:
- Входные данные:
- ret$ =
1
(результат возведения в степень, инициализируется как1
) - lhs$ =
3
(первая переменная для возведения в степень, инициализируется как3
) - n = 100 (количество разрядов, которое нужно возвести в степень, инициализируется как 100)
- ret$ =
- Используется цикл WHILE, который выполняется до тех пор, пока n не станет равным 0:
- Если n и 1 одновременно истинны (то есть n не равно 0), то выполняется операция умножения: ret$ = ret$ * lhs$
- lhs$ умножается на самого себя, и n делится на 2 (что эквивалентно делению на 2 в степени, так как цикл выполняется до тех пор, пока n не станет четным)
- Используется цикл FOR, который выполняется от 1 до длины строки ret$:
- Для каждого символа в строке ret$ добавляется его значение к результату (то есть к строке buf$)
- Результат выводится на экран с помощью функции PRINT
- Функция mul$ используется для умножения двух строк (представляющих числа в десятичной системе счисления) и возвращает результат в виде строки:
- Строка результата инициализируется как
0
заданной длины (длина суммы двух входных строк) - Для каждого символа в строках lhs$ и rhs$:
- Если символ в lhs$ не равен
0
, то выполняется операция умножения на соответствующий символ в rhs$ - Если символ в rhs$ равен
0
, то его значение игнорируется - Полученное значение записывается в соответствующую позицию в строке результата
- Если в процессе умножения возникает перенос, то он учитывается в следующей итерации цикла
- Если символ в lhs$ не равен
- Строка результата инициализируется как
- Функция del$ используется для удаления лишних нулей в конце строки:
- Для каждого символа в строке, начиная с конца:
- Если символ не равен
0
или в строке buf$ есть ненулевой символ, или текущий индекс равен 1, то этот символ добавляется в строку buf$
- Если символ не равен
- Для каждого символа в строке, начиная с конца:
- Результат выводится на экран с помощью функции PRINT
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д