Возвести 2 в любую степень до 1000. Почему в output.txt не выводится больше 11 знаков?
#include <iostream>
#include <string.h>
#include <stdio.h>
using namespace std;
FILE* stream;
int main() {
freopen_s(&stream, "input.txt", "r", stdin);
freopen_s(&stream, "output.txt", "w", stdout);
unsigned short int n;
cin >> n;
if (n == 31) {
cout << 2147483648 << endl;
}
else if (n < 31) {
cout << pow(2, n);
}
else {
int a[310];
a[0] = 8;
a[1] = 4;
a[2] = 6;
a[3] = 3;
a[4] = 8;
a[5] = 4;
a[6] = 7;
a[7] = 4;
a[8] = 1;
a[9] = 2;
unsigned short int i = 32;
unsigned short int l = 9;
while(i <= n){
for (int i = 0; i <= l; i++) {
a[i] *= 2;
}
for (int i = 0; i <= l; i++) {
if (i == l && a[i] >= 10) {
l++;
}
a[i + 1] += (a[i] / 10);
a[i] = a[i] % 10;
}
i++;
}
a[l] += 10;
for (int i = l; i >= 0; i--) {
cout << a[i];
}
}
fclose(stdin);
fclose(stdout);
return 0;
}
Ответы (1 шт):
Автор решения: Mikhailo
→ Ссылка
Вы как-то неверно обрабатываете перенос. Вот попробуйте так:
#include <iostream>
#include <string.h>
#include <stdio.h>
using namespace std;
FILE* stream;
int a[310];
int main() {
freopen_s(&stream, "input.txt", "r", stdin);
freopen_s(&stream, "output.txt", "w", stdout);
unsigned short int n;
cin >> n;
a[0] = 1;
int sz = 1; // Размер числа
for (int i = 0; i < n; ++i) {
int cr = 0; // Перенос
for (int j = 0; j < sz; ++j) {
a[j] = a[j] * 2 + cr; // Умножение цифры на 2
cr = a[j] / 10; // Поиск переноса
a[j] %= 10;
}
if (cr) a[sz++] = cr; // При переносе увеличиваем число
}
for (int i = sz - 1; i >= 0; i--) {
cout << a[i];
}
fclose(stdin);
fclose(stdout);
return 0;
}