Длинная арифметика (возведение в степень) - C (СИ)
Формулировка задачи:
Возведение 2 в степень N.
Мой код на СИ.
Выдаёт правильный результат, но при выводе добавляется куча мусора, берущаяся невесть откуда.
#include <stdio.h> #include <stdlib.h> #define K 10 int main() { FILE *in; FILE *out; int A[K]; int i,j,N; in=freopen("in.txt", "r", stdin); out=freopen("out.txt", "w", stdout); scanf("%d",&N); A[0]=1; for(i=1; i<=K-1; i++) A[i]=0; int k=0; for(i=0; i<=N-1; i++) { for(j=0; j<=K-1; j++) { A[j]=A[j]*2 + k; k=A[j] / 10; } } for(i=0;i<=K-1;i++) { if(A[i] != 0) printf("%d", A[i]); } fclose(in); fclose(out); return 0; }
Решение задачи: «Длинная арифметика (возведение в степень)»
textual
Листинг программы
int n= 1, k= 0; for(i= 0; i < N ; i++) { for (j= 0; j<n; j++) { int a= A[j] * 2; A[j]= a%10 + k; k= a / 10; } if (k>0) { A[j]= k; n++; k--; } if (n >= MAX_D) return 1; }
Объяснение кода листинга программы
- Задаются начальные значения переменных:
n= 1
,k= 0
. - Запускается цикл
for
для перебора чисел от 0 доN
:- Задаются начальные значения переменных внутреннего цикла:
j= 0
. - Внутренний цикл
for
выполняется, покаj<n
: - Переменная
a
получает значениеA[j] * 2
. - Значение
a
делится нацело на 10 и добавляется кA[j]
, сдвигая его вправо наk
разрядов. - Переменная
k
получает значение остатка от деленияa
на 10. - Если
k>0
, то значениеk
добавляется в конец массиваA
, увеличиваяn
на 1 и уменьшаяk
на 1. - Если
n >= MAX_D
, то возвращается 1. - Если
n < MAX_D
, то после выхода из внутреннего циклаfor
выполняется проверка: еслиk>0
, то цикл прерывается.
- Задаются начальные значения переменных внутреннего цикла:
- Если
n < MAX_D
, то после выхода из внутреннего циклаfor
выполняется проверка: еслиn >= MAX_D
, то возвращается 1.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д