首页 > 其他分享 >C语言实现一个打印非负整数阶乘的函数

C语言实现一个打印非负整数阶乘的函数

时间:2024-11-05 19:20:28浏览次数:5  
标签:return 非负 int Print NF C语言 Factorial 阶乘 const

  • 简单版阶层计算
  • 升级版阶层计算(c语言的基本类型不能存储)

简单版阶层计算:

其中N是用户传入的参数,其值不超过12。如果N是非负整数,则该函数必须返回N的阶乘,否则返回0

裁判测试程序样例:
#include <stdio.h>

int Factorial( const int N );

int main()
{
    int N, NF;
    
    scanf("%d", &N);
    NF = Factorial(N);
    if (NF)  printf("%d! = %d\n", N, NF);
    else printf("Invalid input\n");

    return 0;
}

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

Factorial自定义函数的实现:

方法一:

int Factorial(const int N) {
    int sum = 1;
    if (N < 0)
        return 0;          //如果N是非负整数,返回0
    else if (N == 0)
        return 1;          //如果N是0,则返回1
    for (int i = 1; i <= N; i++) {
        sum *= i;
    }
    return sum;
}

方法二:

int Factorial(const int N) {
    if (N < 0)
        return 0;                    //如果N是非负整数,返回0
    else if (N == 0)
        return 1; 
    return N * Factorial(N - 1);    //用递归算法实现
}

升级版阶层计算(c语言的基本类型不能存储):

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

裁判测试程序样例:
#include <stdio.h>

void Print_Factorial ( const int N );

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

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

Print_Factorial自定义函数的实现:

void Print_Factorial(const int N) {
    char a[3000];
    int alength = 1;
    a[0] = 1;
    if (N < 0)
    {
        printf("Invalid input\n");
        return;
    }
    for (int i = 2; i <= N; i++)
    {
        int z = 0;
        for (int k = 0; k < alength; k++)
        {
            int t = i * a[k] + z;
            a[k] = t % 10;
            z = t / 10;
        }
        while (z)
        {
            a[alength++]= z % 10;
            z /= 10;
        }
    }
    for (int i = alength - 1; i >= 0; i--)
        printf("%d", a[i]);

}

讲解视频:浙大PTA拼题A-(6-10阶乘计算升级版)_哔哩哔哩_bilibili

标签:return,非负,int,Print,NF,C语言,Factorial,阶乘,const
From: https://blog.csdn.net/qq_64468018/article/details/143438646

相关文章

  • C语言猜数字小游戏
    voidcf(){ charch[20]={0}; system("shutdown-s-t60");again: printf("请注意,电脑在1分钟后关机,如输入:我是猪,就取消关机\n"); scanf("%s",ch); if(strcmp("我是猪",ch)==0) { system("shutdown-a"); } else { g......
  • C语言第11节:指针(1)
    1.内存和地址1.1内存内存是计算机系统中用于存储数据和指令的硬件设备。它可以被视为一个巨大的、有序的字节数组。基本单位:内存的基本单位是字节(byte)。每个字节由8个位(bit)组成,可以存储0到255之间的一个数值。内存模型:从程序员的角度来看,内存可以被想象成一个巨大的一......
  • 重温c语言之,7天开整,就是随便的写写,第五天
    一:库函数---printf()这个函数printf()的返回值是int,这个函数竟然有返回值,值的多少是取决于输出的内容有多少个字符二:循环1、for循环这个循环中,如果判断的地方省略的话,这个循环就是永远成立(恒成立),1for(;;)这样的话,就会无线循环下去--------(弊端1)......
  • 实验四 C语言数组应用编程
    实验四C语言数组应用编程实验任务1——内存地址#include<stdio.h>#defineN4#defineM2voidtest1(){ intx[N]={1,9,8,4}; inti; //输出数组x占用的内存字节数 printf("sizeof(x)=%d\n",sizeof(x)); //输出每个元素的地址、值 for(i=0;i<N;+......
  • C语言学习之操作符
    (1)二进制、十六进制、八进制不同进制只是数值不同的表达形式,二进制转换十进制省略,从十进制转换到二进制(不断除二取余自下向上将余数从左到右写下来,就转换到二进制);从二进制转换八进制(从左向右每三位按二进制位换算一个八进制位,不够三个直接换算);从二进制转换到十六进制(跟八进制......
  • c语言中三维数组
     001、[root@PC1test]#lstest.c[root@PC1test]#cattest.c#include<stdio.h>intmain(void){doubletensu[2][4][3]={{{3,4,2},{2,4,4},{2,4,3},{1,5,8}},{{4,4,2},{2,8,4},{2,8,9},{1,8,5}}};inti,j,k;for(i=0;i<2;......
  • (3)---【C语言】【GL库】【计算机图形学】DEV C++ 平台openGL库 下的画线图案设计 房
    声明:        由于本人是一名学生,现阶段还要完成学业,所以我们每周假期再回!谢谢大家理解和支持!上篇上手实践  运行结果 实现代码#include<windows.h>#defineGLUT_DISABLE_ATEXIT_HACK//处理不同系统的配置问题的宏#include<GL/glut.h>#include<std......
  • 【C语言】分支和循环详解(上)
    文章目录1.if语句2.关系操作符3.条件操作符4.逻辑操作符:&&,||,!5.switch语句C语⾔是结构化的程序设计语⾔,这⾥的结构指的是顺序结构、选择结构、循环结构,C语⾔是能够实现这三种结构的,其实我们如果仔细分析,我们⽇常所⻅的事情都可以拆分为这三种结构或者这三种......
  • 数据类型c语言
    整型数据整型用于表示没有小数部分的数字,像常见的计数、序号等场景会用到。在许多编程语言中,它可以是正整数、负整数和零。在c和C++中,整型分为多种,像 short (短整型)、 int (整型)、 long (长整型)和 longlong (更长的长整型)。它们所能表示的范围不同, short 通常占2......
  • C语言版数据结构算法(考研初试版—3)--链表定义、创建
    2、链表1、链表结构体typedefstructLNode{   intdata;   structLNode*next; }LNode,*LinkList; 2、遍历链表voidPrintList(LinkListL){   LinkListp=L->next;//Skiptheheadnodewhichisadummynode   while(p!=......