利用数组计算大数的阶乘/幂/加

算法学习(16)阶乘求解(考虑大数组的阶乘求解) 前言 这一篇博客的价值,在于使用了一种处理非常大的数字乘积的方法,这些数字是存储在数组中的,这样,理论上,处理多大的数相乘,都不会有任何问题。 提纲 1.其实,现在的Python, 处理数字的能力已经大为提升,处理500!的没问题,而且速度也很快 在教材里,13!就溢出了…… 测试遇到了递归溢出的问题,在998!的时候出现……具体算一算,那python默认的递归层数就是998层左右?而使用循环... 阅读详情

计算m! 注意这里的m可以>10,同样适用下面的规则。

temp 当前index所在值与乘数相乘的结果

digit  当前的最高位数

next  进位

#define MAX_SIZE 100000
int num[MAX_SIZE];
int main(){
    int m;
    cin>>m;
    //temp digit next
    num[0] = 1;
    int digit = 1;
    int next = 0;
    int temp;
    for(int i = 2; i <= m; i++){
        int j;
        for(j = 0,next = 0; j < digit; j++){
            temp = num[j] * i + next;
            num[j] = temp%10;
            next = temp / 10;
        }
        while(next){
            digit++;
            num[digit-1] = next % 10;
            next = next / 10;
        }
    }
    for(int i = digit-1; i >=0; i--){
        cout<< num[i];
    }
    cout<<endl;
    return 0;
    
}

计算m^n

#define MAX_SIZE 100000
int num[MAX_SIZE];
int main(){
    int m,n;
    cin>>m;
    cin>>n;
    //temp digit next
    int init = m;
    int digit = 0;
    int index = 0;
    while(init){
        num[index++] = init%10;
        init = init/10;
        digit++;
    }
    int next;
    int temp;
    for(int i = 2; i <= n; i++){
        int j;
        for(j = 0,next = 0; j < digit; j++){
            temp = num[j] * m + next;
            num[j] = temp%10;
            next = temp / 10;
        }
        while(next){
            digit++;
            num[digit-1] = next % 10;
            next = next / 10;
        }
    }
    for(int i = digit-1; i >=0; i--){
        cout<< num[i];
    }
    cout<<endl;
    return 0;
    
}

大数相加

void add(string n1, string n2, string &res){// 计算结果用参数的方式传入;尽量用string 和*char 不要用char[]
    reverse(n1);
    reverse(n2);
    string::size_type len1 = n1.size();
    string::size_type len2 = n2.size();
    char ans[len1+len2];
    int next = 0;
    int i = 0;
    for(; i < len1 && i < len2; i++){
        int temp = (n1[i] - '0') + (n2[i] - '0') + next;
        next = temp / 10;
        ans[i] = temp % 10+ '0';
    }
    while(i < len1){
        int temp = n1[i] - '0' + next;
        next = temp / 10;
        ans[i] = temp % 10 + '0';
        i++;
    }
    while(i < len2){
        int temp = n2[i] - '0' + next;
        next = temp / 10;
        ans[i] = temp % 10 + '0';
        i++;
    }
    while(next){
        res[i] = next % 10 + '0';
        next = next / 10;
        i++;
    }
    while(--i >=0 ){
        res += ans[i];
    }
   
}

int main(){
    string n1;
    string n2;
    cin >> n1 >> n2;
    string result="";
    add(n1, n2, result);
    cout<< result <<endl;
    return 0;
}

 

C语言高精度求阶乘之和(利用数组)思路整理 C语言高精度求阶乘之和(利用数组)思路整理。 题目描述 用高精度计算出 S=1!+2!+3!+⋯+n! 其中“!”表示阶乘,例如:5!=5×4×3×2×1 基本思路:利用数组模拟,数组的位置代表不同的位 例如:fac[1]代表个位,fac[2]代表十位,感觉有点类似数学中的列竖式计算。 #include<stdio.h> #define LEN 10000 int main() { int fac[LEN]={0};//求阶乘的数组 int sum[LEN]={0};//依次存 阅读详情

相关推荐

C语言——计算大数阶乘

学过C语言的同学都知道,C语言能表示最大的数就是long double了,但是就算是这样一个数也最多能计算170及以下的阶乘,而对于170以上的大数阶乘却无法用来表示。 因此下面介绍一种来计算大数阶乘的方法。 #include <stdio.h> void Factorial(int n);//声明函数Factorial int main()//主函数,输入n的值 { int...

qq_43615041的博客 5132

使用数组求阶乘

求阶乘的方法很多,可以直接遍历相乘如 while (n>=1){ sum=sum*n n=n-1 } 也可以使用递归: public static int f(int n){ if (n==1)return 1; return n*f(n-1); } 但是对于较大数的阶乘,int类型的存储范围无法满足要求了,可以使用long,但是范围也有限,有什么办法解决呢? 对于Java语言来说,可以使用BigInteger类完成这样的要求,但

qq_45774645的博客 3140

用C语言实现计算大数的阶乘

用C语言实现计算大数的阶乘 在C语言中,double类型的数据虽然可以表示一个很大的数,但是由于尾数只占16位,所以其精确表示的位数只有16位,那么如何表示一个很大的数的阶乘值呢? 我们可以采用数组来表示该阶乘的结果,一个单元存储该结果的一位数(0-9),用C语言实现计算大数的阶乘的代码如下: #include <stdio.h> #include <stdlib.h> #...

weixin_43459369的博客 6319

大数阶乘

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

weixin_30299709的博客 648

数组实现大数阶乘

/********************************************************************************* 思路:用Data数组来存放阶乘的每一位数字,首先令第一位的数值为1,位数为1, 然后将每次相乘的乘积存回数组,并循环处理每个数组中超过10的数,若数值超过10, 则需要进位,将位数加1,原来的数除以10,商数加前一位数的数值后存回前一

聚精会神搞建设 1632

c语言大数阶乘和计算阶乘末尾的0的个数

一、大数阶乘的数据保存 大数进行阶乘,将数据保存在数组中。这样遍历数组,就可以打印出阶乘的结果。 核心计算就是:将阶乘的乘法转化为加法和进位 比如:计算6!= 2*3*4*5*6  设为i 初始result[1]=1,result.length=1,carry默认是0 i = 2 -------->result[1]=(i*result[1])%10=2,carry=0,没产生进

我自倾怀,君且随意 2991

利用数组进行大数字阶乘

进行小数字的阶乘计算一般是使用递归方法来实现,比如计算5的阶乘: public static void main(String[] args) { System.out.println(method_factorial(5)); } public static long method_factorial(long...

drive_的博客 1306

数组实现阶乘

//用数组模拟大数相乘 /* * 例如1*2*3*4=24 那么数组中a[0]=4 a[1]=2 //将大数倒序装进数组 * 24*5 = 120 那么就是a[0]*5 = 20 a[1]*5=10 //每一位只能是0-9 * 所以需要进位 那么就是a[0]=20%10=0 a[1]=a[1]+a[0]/10=12 a[1] = a[1]%10=2 a[2] = a[2]+a[...

Zyfgoup的博客 1955

真题演练-大数存储问题(阶乘计算)

题目:挑战类型表示的极限——大数的存储问题。编程计算并输出1-40之间的所有数的阶乘(如下图所示)。提示:用一个包含50个元素的数组存储一个大数,每个数组元素存储大数中的一位数字。 思想:采用数组存储一个大数,每个数组元素存储大数中的一位数字,采用逐位相乘,后位向前进位的方法计算。 解答: #include <stdio.h> #include <stdlib.h>//s...

jqq125的博客 5849

C/C++ 大数的阶乘算法详解及源码

大数的阶乘算法是用于计算超过标准数据类型(如int或long)能够表示的数的阶乘。大数的阶乘算法是用于计算超过标准数据类型(如int或long)能够表示的数的阶乘。大数的阶乘算法是用于计算超过标准数据类型(如int或long)能够表示的数的阶乘。大数的阶乘算法是用于计算超过标准数据类型(如int或long)能够表示的数的阶乘。

希望我的博客,能帮上你解决学习中工作中所遇到的问题 2735

用数组求N的阶乘,可以运行

用数组求N的阶乘,可以运行用数组求N的阶乘,可以运行

大数阶乘(数组处理)

1.问题描述: 当控制台输入比较大的数字的时候求出n的阶乘,并且 1&lt;= n &lt;= 5000,请在控制台输出n!的结果 2. 思路分析: ① 首先从题目中可以看到n是比较大的数字,我们知道当n小于20的时候这个阶乘已经非常大了,当再进行计算比20大的时候可能Long的数据类型已经无法保存其中的结果了,Long类型的数据最大能够保存的数字为9223372036854775...

二哈 3506

计算阶乘(数组存储)

问题描述。 试计算n!=1×2×3×…×n尾部连续零的个数,这里正整数n(n<10000)从键盘输入。 例如,n=12时,12!尾部连续2个零,输出2。 测试数据: n=2015; n=9999

利用数组计算256的阶乘

<br />假如我们要精确计算一个很大的数,比如说,256的阶乘(结果有500多位),怎么办?<br /><br />    你会说,很好办啊,从JDK 1.1起Java不是提供了一个java.math.BigInteger吗?不错,用BigInteger确实能解决问题。不过,如果没有Sun给的这个class,仅仅靠Java最基本的那些类型,我们有没有办法来进行计算呢?答案是,肯定是能嘛,要不然在BigInteger之前怎么办。<br /><br />方法之一就是用数组来表示。比如说:<br />    

easyjsf的专栏 1447

解锁医疗AI密码:医疗人工智能专业大学四年学习路径

医疗AI人才培养路径解析 本文系统梳理了医疗人工智能专业四年培养方案,分为基础、进阶、应用和拓展四个阶段: 大一聚焦基础学科,涵盖高等数学、医学概论、Python编程等核心课程,辅以医学数据认知实习。大二深入机器学习和医学数据处理领域,学习监督/无监督学习算法及医学影像分析技术。大三进入深度学习阶段,掌握CNN/RNN等神经网络模型,并实践医疗AI应用开发。大四关注前沿技术如大模型在医疗中的应用,完成毕业设计与企业实习。 课程体系强调医工交叉,每学期均配置实践环节,从基础编程到参与真实医疗AI项目,逐步培养

AllenLV的博客 2504

国产麒麟系统中的PaddleOCR离线绿色部署:高效安全的文字识别新纪元

摘要:本文详细介绍了PaddleOCR在银河麒麟V10SP1系统上的离线部署方案。通过Conda虚拟环境隔离依赖,采用离线包安装方式实现无网络部署,支持80+语言识别。重点讲解了模型量化剪枝优化、多线程处理等性能调优技巧,并提供了完整的OCR识别代码示例。该方案具有数据本地化处理的安全优势,适用于医疗票据数字化等对隐私要求严格的场景,同时解决了模型加载失败、内存不足等常见问题。

墨夶的博客 1230

利用数组实现大数的阶乘

大数的相加利用数组是比较简单实现的 大数的阶乘主要是根据小学计算乘法的规则  稍加改进  代码如下package ACM; import java.util.Scanner; public class Main{ public static void main(String []args){ Scanner sc = new Scanner(System.in); int n=

Aierbude的博客 912

NXP KW47蓝牙MCU低功耗实测:从8μA睡眠到5年续航的优化实战

在物联网和嵌入式系统开发中,低功耗设计是决定电池供电设备续航能力的关键技术。其核心原理在于通过事件驱动、状态机管理和精细的电源域控制,使设备在空闲时进入深度睡眠,仅在需要时快速唤醒工作,从而将平均电流从毫安级降至微安级。这项技术的工程价值在于能够实现纽扣电池供电设备长达数年的使用寿命,广泛应用于智能家居传感器、可穿戴设备、资产追踪和工业监测等领域。以NXP KW47系列无线MCU为例,其集成的Arm Cortex-M33双核与专用射频单元,配合多级睡眠模式和高效DC-DC转换器,为超低功耗蓝牙应用提供了硬件

weixin_30162121的博客 257

大数的阶乘(C++实现)

大数的阶乘 原理 大数的阶乘的运算我个人的思路就是用整型数组进行运算,转化为字符串数组进输出,防止零的丢失,多个字符串数组并列输出长长的结果。先以100的阶乘为例 100的阶乘 我们计算100!这里的数比较大,可以用整型数组进行运算,字符串来存储大数,普通方法会数据类型会越界。 首先我们倒着运算 100 * 99 = 9900 9900 * 98 = 970200 如果这个数字超过了 10000...

kube_const的博客 2826

STM32 USART高级功能全解析:IrDA、DMA、硬件流控与低功耗唤醒

USART是嵌入式系统中最基础的串行通信外设,其核心原理在于同步/异步时序控制与数据帧收发机制。现代MCU如STM32通过深度集成IrDA调制解调、DMA直传通道、RS232/RS485硬件流控及Stop模式唤醒等扩展能力,显著提升通信可靠性、吞吐效率与能效比。其中,IrDA SIR采用RZI编码实现抗干扰红外传输,DMA通过TXE/RXNE事件驱动实现零CPU干预的连续数据流,而硬件流控(RTS/CTS/DE)和低功耗唤醒(WUF+UESM)则分别保障工业现场鲁棒性与电池级超长待机。本文围绕STM32平台

weixin_28922227的博客 211

anaconda navigator 卡在loading application界面一直没有反应解决办法

在打开anaconda navigator 程序的时候,遇到了2个问题。第一个问题:打开的时候弹出提示:There is an instance of Anaconda Navigator already running.第二个问题:程序一直卡在loading application界面一直没有反应。以下是我的解决办法,有效果。

猿小白的博客 4386

C语言求大数的阶乘

我们都知道如何计算一个数的阶乘,可是,如果这个数很大呢,该如何计算? 当一个数很大时,利用平常的方法是求不出来它的阶乘的,因为数据超出了范围。因此我们要用数组来求一个大数的阶乘,用数组的每位表示结果的每个位数。话不多说,直接上代码 #include&lt;stdio.h&gt; #include&lt;string.h&gt; int main() { int i,j,n,temp,d=1...

独钓门前月 9969

零基础做完YOLOv8船只检测系统:HRSC2016数据集 + 完整UI,稳过答辩

亲爱的同学,通过这篇教程,你已经掌握了“基于YOLOv8的HRSC2016微小船只检测系统”从数据集处理、模型训练到Tkinter界面开发的全流程。这个课题既贴合“海事智能化”的产业战略,又涵盖了“目标检测、深度学习、界面开发”等多个毕设评分点,非常适合作为计算机或海事工程专业的毕业设计。在实践中,你可能会遇到“海面背景复杂导致船只漏检”“微小船只识别精度不足”“UI与模型推理同步卡顿”等挑战——别担心,这些都是技术成长的必经之路。

FJN110的博客 108
上一篇: 关于回溯的题目
下一篇: c++ 深拷贝 浅拷贝
kotomi_du
博客等级 码龄10年 5粉丝 91原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值