首页 > 编程语言 >PTA基础编程题目集 6-10 阶乘计算升级版

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

时间:2024-03-26 16:03:21浏览次数:29  
标签:10 const int PTA Factorial Print 阶乘 bit

阶乘计算升级版

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

函数接口定义:

void Print_Factorial ( const int N );

其中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;
}

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

输入样例:

15

输出样例:

1307674368000

 思路分析:

题6-8 简单阶乘计算,我们定义的就是int型,但在这里数字大小已经超出int型的最大值。int型只支持12及以下的阶乘。这里需要用到数组,来存储结果。

这道题的思路就是模拟小学学的乘法的手算,满10进1。

我们用flag来表示进位的值,bit表示这个结果有多少位,请注意,初始时,要将bit赋值为1,不然得到的所有结果都是0.

代码:

void Print_Factorial ( const int N ){
	if(N<0){
		printf("Invalid input\n");
		return 0;
	}
    if(N==0){
        printf("1\n");
        return 0;
    }
	int num[10000]={0};
	num[0]=1;//第一个位置赋值为1,不然的得出的结果都是0 
	int n=N;
	int flag=0,bit=1;//进位的数字大小,统计有多少位数
	for(int i=2;i<=n;i++){
		flag=0;//每次循环都要置0 
		for(int j=0;j<bit;j++){
			int temp=0;
			temp=num[j]*i+flag;
			num[j]=temp%10;
			flag=temp/10;//进位 
		}
		while(flag !=0){
			num[bit]=flag%10;//flag到后面可能会>10 
			flag/=10;
			bit++;
		}
		
	}
	for(int i=bit-1;i>=0;i--){
		printf("%d",num[i]);
	}	
}

标签:10,const,int,PTA,Factorial,Print,阶乘,bit
From: https://blog.csdn.net/weixin_54641008/article/details/137042369

相关文章

  • 产品推荐 | 基于EV10AQ190的多通道 最大5Gsps 10bit AD FMC子卡
    一、板卡概述  FMC147是一个四通道多模式AD子卡,完全符合VITA 57.1标准。该卡提供4个10位ADC通道,支持采样4、2、或1通道,采样速率为5Gsps、2.5 GSPS、1.25Gsps选择。  采样时钟可以通过一个同轴电缆连接外部提供,或由内部时钟源(可选锁定到一个外部参考)提供,通过I2C串行......
  • GBU3010-ASEMI开关电源整流桥GBU3010
    编辑:llGBU3010-ASEMI开关电源整流桥GBU3010型号:GBU3010品牌:ASEMI封装:GBU-4特性:插件、整流桥平均正向整流电流(Id):30A最大反向击穿电压(VRM):1000V恢复时间:>2000ns最大RMS电压:引脚数量:4芯片个数:4最大正向压降:1.05V芯片尺寸:160MIL工作温度:-55℃~150℃正向浪涌电流:300A类型......
  • 超实用!10条JavaScript这20年来增加的新功能!
    部门捞人,前端可投:https://jinshuju.net/f/o38ijj在过去的20年里,JavaScript经历了多次更新和升级,引入了许多新功能以增强其表达力、交互性和开发效率。以下是一些显著的新功能:**1.ECMAScript6(ES6)**:这是JavaScript的一个重要更新,引入了箭头函数、模板字符串、解构赋值、默认......
  • windows10挂载ubuntu18.04虚拟机
    一、安装samba1、安装sudoapt-getinstallsamba2、验证安装结果,出现版本信息则安装成功。samba二、修改samba配置文件1、备份配置文件sudocp/etc/samba/smb.conf/etc/samba/smb.conf.bak2、查看备份结果 ls/etc/samba/3、修改配置文件sudovi/etc/samb......
  • win10桌面记事本在哪里设置 win10桌面便签小工具
    对于职场人士来说,电脑桌面不仅是工作的主战场,更是一个信息交汇的中心。在日常办公中,经常需要记录临时想法、待办事项或重要提醒。这时,一款实用的电脑桌面记事本或便签工具是必不可少的。想象一下,当你正在处理一份报告,突然想到一个需要稍后处理的事项,如果能在桌面上快速记录,就不用......
  • 面对对象10:Super详解
    1.person类packagecom.oop.demo05;//在Java中,所有的类都默认直接或间接继承Object类//父类publicclassPerson{//无参默认构造器,当方法被重写时,需要被显示定义publicPerson(){System.out.println("Person无参执行了!");}protectedStri......
  • 【问题处理】cannot register qt5vs vs2010 help
    问题描述:安装qt-vs-addin-1.2.4-opensource时,在安装过程中弹出错误窗口,错误信息为cannotregisterqt5vsvs2010help;安装完成后,打开VS2010无法使用插件。解决方案:Window10搜索cmd并使用管理员身份运行,随后输入如下命令"C:\ProgramFiles(x86)\MicrosoftSDKs\Windows\v7......
  • 核心子方法10: registerListeners()方法详解
    先总结: 该方法主要用于注册监听器, 在所有注册的bean中查找listener监听器bean,注册到消息广播器中1.遍历应用程序中存在的监听器集合,并将对应的监听器添加到监听器的多路广播器中for(ApplicationListener<?>listener:getApplicationListeners()){get......
  • Windows 10无法登录Xbox及其附属产品(包括但不限于Game Bar,Minecraft Launcher)
     1. 问题描述:打开Xbox(如下图) 或GameBar(如下图)  后,单击登录,会弹出一个窗口,印有自己账户的头像,下方一行小字“欢迎回来,$昵称$”,如下图所示:  单击唯一的绿色按钮“现在就开始吧”,该窗口消失,马上又回到点击登录前的界面。循环尝试结果都不变。2.解决方法第一步......
  • DW1000是什么--超宽带 (UWB) 低功耗、低成本收发器 IC 适用于定位标签精准定位
    超宽带技术是一种全新的、与传统通信技术有极大差异的通信新技术。它不需要使用传统通信体制中的载波,而是通过发送和接收具有纳秒或纳秒级以下的极窄脉冲来传输数据。FCC对UWB系统的定义为带宽>500MHz且载波中心频率>2.5GHz。DW1000是一款完全集成的单芯片超宽带(UWB)低功耗......