为什么c中的这个功能给出意想不到的结果?

时间:2015-09-05 18:42:01

标签: c

我正在学习C函数构造,我正在尝试用两个参数创建一个指数函数:base&指数。

#include <stdio.h>
#include <stdlib.h>


int power(int a,int b){

    int c;
    int i;
    c=1;

    for(i=1;i<=b;++i){
        c=c*a;
    }
    return c;
}

int main(){

    int nice=power(5,20);
    printf("answer =%d , and size is=%d ", nice, sizeof(nice));
    return 0;
}

当我执行程序时,它给出了以下输出:

  

answer = 1977800241,大小= 4

编辑: 但是当我执行power(5,2)时,它会得到25的完美结果。

1 个答案:

答案 0 :(得分:0)

整数溢出。您必须使用unsigned long longlong long

#include <stdio.h>
#include <stdlib.h>

typedef long long ll;
ll power(ll a,ll b){

ll c,i;
c=1;

for(i=1;i<=b;++i){
    c=c*a;
}
return c;
}

int main(){

ll nice=power(5,20);
printf("answer =%lld , and size is=%lld ", nice, sizeof(nice));
return 0;
}

注意:

你会对此有一个好主意 - &gt;阅读此SO question

问题-2:a = 5 b = 100

会发生什么

然后你必须编写自定义函数来操作乘法。使用int arr[100]来保存大数字的数字,然后相应地相乘.C / C ++不提供BIgInt Java之类的任何内容,你必须构建它。