увеличить размер типа int
Компиляторы иногда предлагают элементы управления размером int
, но часто они привязаны к целевой системе как 32, 16, 64, ... биты.Должно быть не менее 16.
сохранить значение 5 ^ 30
5 30 , это 931322574615478515625, 70-битное число.
C не определяет целочисленный тип, достаточно широкий для этого, хотя некоторые системы поддерживают 128-битное целое число.
Отсутствие 128-битного целого числа для хранения этого целочисленного значения требует другого подхода.Существуют различные библиотеки произвольной ширины.
Быстрый способ - использовать string - не очень эффективно, но выполняет свою работу.
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
char *strmult(char *s, size_t size, unsigned char m) {
size_t len = strlen(s);
if (len >= size) {
return NULL;
}
int carry = 0;
for (size_t i = len; i-- > 0;) {
if (!isdigit((unsigned char ) s[i])) {
return NULL;
}
int sum = (s[i] - '0') * m + carry;
s[i] = sum % 10 + '0';
carry = sum / 10;
}
if (carry) {
if (len + 1 >= size) {
return NULL;
}
memmove(s + 1, s, len + 1);
s[0] = carry + '0';
}
return s;
}
int main(void) {
char s[100] = "1";
for (int i = 0; i < 30; i++) {
strmult(s, sizeof s, 5);
}
puts(s);
}
Output
931322574615478515625