变量类型问题,求帮解答

在求99 的阶乘的时候出现结果为零

img


请问我的代码是哪里出现错误了吗

#include <iostream>
using namespace std;
int func(int n){
    unsigned long a;
    if(n<0)
    cout<<"n<0,数据错误"<<endl;
    else
        if(n==0||n==1)
        a=1;
        if(n>1)
        a=func(n-1)*n;
}
int main(){
    int n;
    unsigned long q;
    for(;;)
    {
    system("cls");
    cout<<"请输入要求阶乘的数"<<endl; 
    
    cin>>n;
    q=func(n);
    cout<<n<<"的阶乘为:"<<q<<endl;
    system("pause");
}
    return 0;
}


结果太大啦,哪是一个int能行的啊。用double吧,long long也不够的

#include <iostream>
using namespace std;
double func(int n){
    if(n<0)
    {
        cout<<"n<0,数据错误"<<endl;
        return 0;
     }
    else if(n==0||n==1)
            return 1;
    return func(n-1)*n;
}
int main(){
    int n;
    double q;
    for(;;)
    {
    system("cls");
    cout<<"请输入要求阶乘的数"<<endl; 
    
    cin>>n;
    q=func(n);
    cout<<n<<"的阶乘为:"<<q<<endl;
    system("pause");
   }
    return 0;
}
 
 

两个问题:
(1)func函数,你没有返回值(没有return 语句)
(2)99的阶乘很大,超出int类型范围,需要改成double类型
代码修改如下:

img

#include <iostream>
using namespace std;
double func(int n)
{
    double a;
    if(n<0)
    {
        cout<<"n<0,数据错误"<<endl;
        return 0;//这里的返回值根据题目来定
    }
    else
    {
        if(n==0||n==1)
            a=1;
        else
            a=func(n-1)*n;
        return a;
    }
}
int main(){
    int n;
    double q;
    for(;;)
    {
        system("cls");
        cout<<"请输入要求阶乘的数"<<endl; 

        cin>>n;
        q=func(n);
        cout<<n<<"的阶乘为:"<<q<<endl;
        system("pause");
    }
    return 0;
}