PTA 基础编程题集 6-10阶乘计算升级版

1.题目介绍
2.解题代码
3.疑问
4.解决

1.题目
本题要求实现一个打印非负整数阶乘的函数。

函数接口定义:

void Print_Factorial ( const int N );

其中N是用户传入的参数,其值不超过1000。如果N是非负整数,则该函数必须在一行中打印出N!的值,否则打印“Invalid input”。

裁判测试程序样例:

#include 

void Print_Factorial ( const int N );

int main()
{
    int N;
	
    scanf("%d", &N);
    Print_Factorial(N);
    return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

15

输出样例:

1307674368000

2.解题
解题方法有两种 有优劣之分

//1更改数据类型范围的方法  14分
// void Print_Factorial (const int N )
// {
//     int n = N;
//     long long sum = 1;
//     int i;
//     if(n<0||n>1000)
//     {
//         printf("Invalid input");
//     }
//     else
//     for(i=n;i>0;i--)
//     {
//         sum *= i;
//     }
//     printf("%lld",sum);
// }

//2最好的方法是用数组来存大数
void Print_Factorial(const int N)
{
    int n = N;
    if(n<0)
    {
        printf("Invalid input");
    }
    
    int num[3000] = {0};
    int k,a;
    k = 1; //位数
    a = 0; //进位
    num [0] = 1;  //初始化为1
    int tmp;  //tmp是阶乘的任一元素与临时结果的某位的乘积结果
    
    for(int i=1;i<=n;i++)
    {
        for(int j=0;j=0;b--)
    {
        printf("%d",num[b]);
    }
}

3.疑问
不知道为什么用写的方法2进行OJ的时候总是会显示n<0时出错,检查了几遍,也试过加\n试过不把const N提取出来 就是改正不了== 这样能拿到19分 但不知道
报错如图
PTA 基础编程题集 6-10阶乘计算升级版_第1张图片

求解答、、

4.解答
对比了一下其他人的满分做法后
发现在printf后加上一行return就能解决
因为如果N<0,后面就直接不做了…
不然继续往下运算的话系统会判断错误
完整如下:

void Print_Factorial(const int N)
{
    int n = N;
    if(n<0)
    {
        printf("Invalid input");
        return ;
    }
    
    int num[3000] = {0};
    int k,a;
    k = 1; //位数
    a = 0; //进位
    num [0] = 1;  //初始化为1
    int tmp;  //tmp是阶乘的任一元素与临时结果的某位的乘积结果
    
    for(int i=1;i<=n;i++)
    {
        for(int j=0;j=0;b--)
    {
        printf("%d",num[b]);
    }
}

你可能感兴趣的:(PTA,c语言)