Он отлично работает, кроме 5, когда я даю 5, он неправильно рассчитывает
Нет, он отлично работает для значений меньше , чем 5
.Когда вы вводите 5
для a
и n
, результирующее число суммирования будет 30517578125
, что является большим значением для переменной типа 32
bit int
.Вместо этого вы должны использовать переменную типа uint64_t
.
Кроме того, вы не должны использовать функцию pow()
для целочисленного типа.Проверьте это .
Вы можете сделать:
#include <stdio.h>
#include <inttypes.h>
int main()
{
int i, a, n;
uint64_t num = 1, result = 1;;
printf ("Enter a: \n");
scanf("%d",&a);
printf ("Enter n: \n");
scanf("%d",&n);
for(i = 0;i < n;i++){
num = num * a;
result = num * result;
}
printf("result: %"PRId64"\n", result);
return 0;
}
Обратите внимание, что это 64
битовое решение также имеет ограничение и будет работатьдля ввода 5
, но не может быть для числа, немного превышающего 5
.Если вы хотите произвольно большое число, отметьте это .