int power(int first,int second) {
int counter1 = 0;
long ret = 1;
while (counter1 != second){
ret *= first;
counter1 += 1;
}
return ret;
}
int main(int argc,char **argv) {
long one = atol(argv[1]);
long two = atol(argv[2]);
char word[30];
long finally;
printf("What is the operation? 'power','factorial' or 'recfactorial'\n");
scanf("%20s",word);
if (strcmp("power",word) == 0){
finally = power(one,two);
printf("%ld\n",finally);
return 0;
}
}
Эта функция предназначена для работы "мощности", как на калькуляторе, поэтому, если я пишу: ./a.out 5 3
, она даст мне 5 мощности 3 и распечатайте 125
Проблема в том, что числа, подобные цифрам: ./a.out 20 10
, 20 - мощность 10, я ожидаю увидеть результат: 1.024 x 10^13
, но вместо этого выводит 797966336
.
В чем причина текущего вывода, который я получаю?
Примечание. Я предполагаю, что это имеет какое-то отношение к типам данных atol()
и long
. Являются ли они недостаточно большими для хранения информации? Если нет, любая идея, как заставить его работать для больших чисел?