Длинная арифметика (возведение в степень) - 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.