计算N的阶乘

高精度计算-n的阶乘 问题描述   输入一个正整数n,输出n!的值。   其中n!=1*2*3*…*n。 算法描述   n!可能很大,而计算机能表示的整数范围有限,需要使用高精度计算的方法。使用一个数组A来表示一个大整数a,A[0]表示a的个位,A[1]表示a的十位,依次类推。   将a乘以一个整数k变为将数组A的每一个元素都乘以k,请注意处理相应的进位。   首先将a设为1,然后乘2,乘3,当 阅读详情

/*************************************************/
/*  计算N的阶乘                                  */
/*  皮业勇                                       */
/*  2005.9.19                                    */
/*  piyeyong@gmail.com                           */
/*************************************************/
#include<stdio.h>

#define N 20000
#define MAX 20000

/* 存放结果的数组,低位在前,高位在后 */
int integer[N+1];

/* 把num加到integer的第p位上,注意,满位时要进位,所以add会调用本身 */
void add(int p, int num)
{
 int q, num2;

 if(p < 1 || p > N) {
  printf("add error/n");
  return;
 }

 do{
  integer[p++] += num % 10;
  
  q = p - 1;
  if(integer[q] > 9) {
   num2 = integer[q];
   integer[q] = num2 % 10;
   add(q + 1, num2/10);
  }

  num /= 10;
 }while(num);
}

/*  integer 乘以c */
void multiply(int c)
{
 int i;
 int iTemp = 0;

 for(i = N; i >=1; i --)
 {
  if(!integer[i])
   continue;
  iTemp = integer[i] * c;
  integer[i] = 0;
  add(i, iTemp);
 }
}

int main()
{
 int n, p;
 printf("Input number n:");
 scanf("%d", &n);
 if(n > N) {
  printf("Exceed max number %d/n", N);
  return 1;
 }
 if(n < 0) {
  printf("Please input a positive number/n");
  return 2;
 }
 integer[1] = 1;

 for(int i=1; i <=n; i ++)
 {
  multiply(i);
 }

 printf("Result of %d! is:", n);
 for(i = N; i >=1; i --)
 {
  if(integer[i]) {
   p = i;
   break;
  }
 }
 for(i = p; i >=1; i --) {
  printf("%d", integer[i]);
 }

 putchar('/n');

/* 验证结果用,数结尾0的个数时参照 */
 printf("1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890/n");

 return 0;

}

计算n的阶乘 C语言学习初期,相信你肯定编写过“计算n的阶乘”代码吧!怎么样,是不是觉得过于简单了呢?哈哈,就让我们再次回温这道题,详解它的编写过程(从最初的构思到具体的设计,体会一个脑海中的idea切切实实转化为代码的奇妙过程) 下面进入正题: 说明:本题我们暂时不探讨溢出问题,所以就拿“计算10的阶乘”举例 思路构想:计算10的阶乘,首先明白它的求法(即):10*9*8*7*6*5*4 阅读详情

相关推荐

离线安装ambari 更换spark版本 集成carbondate文档

1、Linux系统环境配置 1.1 配置IP地址 vim /etc/sysconfig/network-script/ifcfg-eth0 “DEVICE”:网卡对应的设备别名,如ifcfg-eth0第一块网卡; “HWADDR”:网卡物理地址; “BOOTPROTO”:网卡获得ip地址的方式,Static(静态 ip地址)dhcp(通过dhcp协议获取ip)bootip通过boot...

weixin_44742962的博客 3036

简单求阶乘问题(c语言)

本题要求编写程序,计算N的阶乘。 输入格式: 输入在一行中给出一个不超过12的正整数N。 输出格式: 在一行中输出阶乘的值。 输入样例: 4 输出样例: 24 代码实现如下: include<stdio.h> int main() { int x,sum=1; scanf("%d",&x); while(x!=0) { sum*=x; x--; } printf("%d\n",sum); r

weixin_45385429的博客 7956

Jetson Orin Nano GPIO 实战,用 devmem 玩转 Pinmux 引脚复用配置

devmem 是一个直接读写寄存器的工具,通过 mmap 将 /dev/mem 中的物理地址区域映射到用户空间进程地址空间,从而实现直接读写,正常情况下在 /dev 下可以看到 mem。可以看到对应 bit5 bit6 分别为 1,对应配置为 E_IO_HV 为 ENABLE 以及 E_INPUT 为 ENABLE。需要 TRM 手册查看相关寄存器,以及安装 busybox,busybox 内置了 devmem。根据 TRM 手册,找到 I2C_SDA 的 pinmux 地址偏移是 0x18。

darcsdn 1643

7-24 求N的阶乘 (15 分)

本题要求编写程序,计算N的阶乘。 输入格式: 输入在一行中给出一个正整数N。 输出格式: 在一行中按照“product = F”的格式输出阶乘的值F,请注意等号的左右各有一个空格。题目保证计算结果不超过双精度范围。 输入样例: 5 输出样例: 在这里给出相应的输出。例如: product = 120 #include<stdio.h> int main() { ...

qq_45728926的博客 7373

当MATLAB遇见ROS2:一场跨平台实时仿真的技术融合与创新实践

本文探讨了MATLAB/Simulink与ROS2在跨平台实时仿真中的技术融合与创新实践。重点介绍了在Windows+WSL2异构环境下构建高可靠性联合仿真系统的架构设计、PX4仿真环境与DDS中间件的集成方法,以及MATLAB R2024b对ROS2深度集成的实战技巧,为复杂机器人系统的开发提供了高效解决方案。

rum55的博客 245

超全!!snowboy语音唤醒(树莓派4b)

通过snowboy进行树莓派的语音唤醒

crimaster1024的博客 8734

简单求阶乘问题

简单求阶乘问题分数 10全屏浏览题目切换布局作者 颜晖单位 浙大城市学院本题要求编写程序,计算N的阶乘。

qq_2937655951的博客 2017

手把手教你用 Docker 构建自己的 CentOS 基础镜像

目录一、准备CentOS基础镜像二、撰写Dockerfile三、构建Docker镜像四、生成Docker容器 相信码农们经常会听说:虚拟机将成为历史,Docker才是未来 !!! 事实如此,现在大部分公司都在用 Docker 技术,想拥有自己的 Docker 专属镜像,那么 Dockerfile 就是入门,现在让我们一起来看一下 ------ 构建 Docker 镜像的全过程。 好文章 记得收藏...

Nick.Peng's Blogs 1万+

C语言入门——计算n的阶乘

(1)首先要做的是要有这n个数字,那么我们可以借助while循环、do_while循环、或者for循环来实现。当通过键盘输入5时,程序将5赋值给n,那么就是求5的阶乘,最后输出结果120.1、首先明确n的阶乘在数学中怎么算:1*2*……*(n-1)*n = n。(2)有这n个数字了,那么子再办法把他们乘在一起,赋给一个变量就行了。2、do_while语句来实现,代码如下。1、while语句循环来实现,代码如下。3、for语句来实现。通过c语言编程计算n的阶乘。2、怎么用c语言来实现呢。

m0_74305675的博客 2万+

SAP 行业扫盲系列之一:SAP 从业者的分类

本文简单介绍了 SAP 从业者的分类,限于笔者狭隘的视角,可能存在遗漏或者不恰当的地方,希望大家在评论区指出。 那些在知乎咨询上向我提问关于进入 SAP 行业建议的朋友们,也请大家提问时注明自己想具体从事 SAP 行业哪一类的工作,这样才能得到更让你们满意的回复。感谢阅读。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1589

SystemVerilog从入门到实战

SystemVerilog复合数据类型概述 SystemVerilog增强了Verilog的数据建模能力,提供多种复合数据类型: 数组类型:包括定宽数组(固定大小)、动态数组(运行时分配)和多维数组,支持高效索引访问。 队列:结合数组和链表特性,支持两端快速插入/删除操作,提供push/pop等方法。 关联数组:键值对存储结构,支持稀疏数据存储和快速查找,提供exists/delete等方法。 结构体:组合不同类型数据成员,支持打包(packed)形式以优化存储空间。 枚举类型:为数值赋予语义名称,支持状态

2301_79143213的博客 1225

本题要求编写程序,计算N的阶乘。输入格式:输入在一行中给出一个不超过12的正整数N。输出格式:在一行中输出阶乘的值。输入样例:4输出样例:24

int factorial(int n)//函数定义 放在主函数之前无需声明。int factorial(int n)//函数定义。int main(void)//主函数。int main(void)//主函数。

2301_81396191的博客 963

《AI Coding手册:Claude Code、OpenAI Codex、OpenClaw深度解析与实战指南》

AI编码技术经历了从简单规则匹配到深度神经网络,再到当前智能体(Agent)架构的范式转变。第一阶段:静态代码补全(2010-2018)早期工具如IntelliSense、Emmet基于语法分析和固定模板提供代码提示。这类系统依赖预定义规则,缺乏语义理解能力,仅能处理局部代码片段。第二阶段:统计语言模型(2018-2020)以GPT-2、TabNine为代表,引入基于大规模代码训练的神经语言模型。

AI天才研究院 1033

计算n的阶乘以及n个阶乘相加

n的阶乘,也就是n! 有一说一之前看到这玩意我一度认不出来(数学都还给老师了,麻烦学费退一下谢谢!),后来说是n的阶乘才有了一丝丝的印象(钱不用退了,您收着吧),即 1 * 2 * 3 * …… * n 记得是上中学才接触到这玩意,当时一度怀疑我学这玩意有什么用,生活中仿佛没啥用得着这兄弟的地方,后来事实证明,好像确实没啥用的亚子,感觉仿佛白学了 自己算着仿佛也怪麻烦的,没少在这玩意上边丢分,那就扔给电脑算咯 电脑: 那咋写咧,先使个while循环叭 int main() { int i = 2;//

weixin_52571040的博客 3453

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

python求n的阶乘代码_python计算n的阶乘的方法代码

python中n的阶乘的算法?1 math.factorial(x) 用python计算n的阶乘的方法。(含示例代码) 2. reduce函数 用python计算n的阶乘的方法。python里怎么分享n的阶乘就是那个n的阶层到底是多少的?非常简单的打开看一下这个辅导资料。输入n 计算n的阶乘,要用递归算法,python,大def fact(n):if n==0:return 1else:retur...

weixin_39629631的博客 6220

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

编写求阶乘函数fact(),编程计算并输出从1到n之间所有的阶乘值

#include<stdio.h> int fact(int n); int main() { int i,n; printf("输入n(n>0):\n"); scanf("%d",&n); for(i=1;i<=n;i++) { printf("%d!=%d\n",i,fact(i)); } return 0; } /*函数功能:用迭代法计算...

看花容易绣花难 2万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

c语言中阶乘相加怎么表示_c语言中如何计算n的阶乘

c语言计算n阶乘的方法:首先创建一个脚本文件,并编写头文件;然后定义一个“i”变量用来循环,以及定义变量“n”;接着用“sum”来保存结果;最后运行该脚本文件即可实现n阶乘。C语言中求阶乘的计算其实就是从1到n的累积,所以我们可以通过一个for循环从1到n依次求积即可实现阶乘的计算在c语言中我们常会遇到求一个数的阶乘的问题,对于刚学习C语言的人来说,求阶乘是必须要会的。接下来在文章中为大家分享如何...

weixin_39576133的博客 6164

python计算n的阶乘

觉得不错点个赞谢谢!

guleilei0的博客 1万+

《计算N的阶乘》 题解

n的阶乘计算公式为:n!这里n很大,我们必须要用高精度去模拟整个乘法过程;请计算n的阶乘(1<=n<=100)

专门发一些c++题解 400

js-计算n的阶乘

方法一 <script> // 计算n的阶乘 var n = parseInt(window.prompt('input')); //输入n的值 var mul = 1; for(var i = 1; i <= n; i++) { mul *= i; } d...

qq_44867271的博客 2789

python编写程序求n的阶乘,python计算n的阶乘之和

大家好,小编来为大家解答以下问题,python编写一个函数计算n的阶乘,python编写程序计算n的阶乘,现在让我们一起来看看吧!

2401_84471631的博客 1074

python计算n阶乘中尾部零的个数_写一个算法计算n的阶乘末尾0的个数

解答首先,算出n的阶乘的结果再去计算末尾有多少个0这种方法是不可取的, 因为n的阶乘是一个非常大的数,分分种就会溢出。我们应当去分析, 是什么使n的阶乘结果末尾出现0。n阶乘末尾的0来自因子5和2相乘,5*2=10。因此,我们只需要计算n的阶乘里, 有多少对5和2。注意到2出现的频率比5多,因此,我们只需要计算有多少个因子5即可。 我们可以列举一些例子,看看需要注意些什么:5!, 包含1*5, 1...

weixin_39683692的博客 1436

计算1到n的阶乘之和

计算 1!+2!+3!+…+N! 这个算式,我们要先计算出n的阶乘并保存到一个数列中,然后再把各个数的阶乘相加,按照规定格式打印输出结果即可。 public static void main(String[] args) { System.out.println("请输入一个数字!"); a(); } // 阶乘 public static int b(int m) { if (m == 1) return 1; return m * b(m - 1); } // 求

qq_48435360的博客 5874

计算n的阶乘和

实现思路:问题中的阶乘n需要从键盘输入,先计算n的阶乘,就得有一个变量i从1遍历到n,进入循环有一个变量ret,初始值为1,来记住本次的乘积ret*i,随着i的增加,当i增加到n时,输出ret。在定义一个sum,每项得出的结果ret加到sum中。#include <stdio.h>int main() { int n; int i = 0; int sum = 0;

IT小书生的博客 6380
上一篇: VC中几个基本问题
下一篇: 递归法算24
flying2
博客等级 码龄25年 4粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值