Длинная арифметика. Возведение в степень - 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д