取幂快速算法问题c语言

开始学习数据结构和算法,有一个取幂快速算法例子,自己写了一下
发现2的62次方这种数打印的值是0,不知道为啥
下面是代码

#include<stdio.h>
 long int pow(long int x,unsigned int n);
 long int pow(long int x,unsigned int n)
{
    
    if(n==0)
    {
        return 1;
        
    }
        else if(n==1)
    {
        return x;
        
    }
        else if(!(n%2))
    {
        return pow(x*x,n/2);
        
    }
    else
    {
        return pow(x*x,n/2)*x;
        
    }
    
    
    
    
}
int main(void)
{
    int x,n;
    scanf("%d%u",&x,&n);
printf("%d",pow(x,n));
return 0;
}    
    
```c


![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/494102541236163.png "=600 #left")

先不说long int是不是8字节,你这个printf的格式能打印8字节整型吗?

先怀疑是溢出,long也是4字节,最多也就2^31-1,你直接算2^62当然会溢出
八字节的长整型要写为long long int
有帮助望采纳