捏妈第三节的题单名不是循环结构吗,直接出了第八节的高精度大数计算,紧急学习

对于较大数的加减乘除阶乘等,C/C++原生的数据类型是存储不了的(即便用longlong),直接计算会出现数据移除成负数的结果

为了解决这类超大数的运算,我们选择用字符数组或者整型数组来进行模拟运算。

所谓模拟运算也就是把大数的每一位存储到数组的一个数组元素中,然后模拟类似于列竖式手算的形式来一位一位的进行运算

最后输出的时候当然也是一位一位的输出了,而且为了计算进位方便,通常倒序存储数字,同时输出时倒序输出

P1009d

这道题其实就是让我们用高精度阶乘加上高精度加法来算结果

 1 #include<stdio.h>
5 int main()
6 {
7 int N;
8 scanf("%d", &N);//阶乘指标输入
9 int Factorial[1000] = { 0 };//Factorial,阶乘的英语,嘿嘿

//这个数组用来存储每次阶乘的结果
10     Factorial[0] = 1;//初始化
11 int Num = 0;//进位指示,初始无进位数据
12 int Digit = 1;//当前数组或者说大数的位数,同时也可以作为逆序输出的指针 14 for (int i = 1; i <= N; i++)
15 {
16 for (int j = 0; j <Digit; j++)
17 {
18 int Temp = Factorial[j] * i + Num;//临时数据存储,包含计算数据以及上次保存的进位数据
19 Factorial[j] = Temp % 10;
20 Num = Temp / 10;//将个位存入当前位的数组,十位的数字存入进位指示进入下一轮
21 }
22 while(Num)//进位数据若未取完,说明要顺延进位
23 {
24 Factorial[Digit] = Num%10;
25 Num = Num / 10;//对于百位及以上未取完进位数据的处理,因为乘法进位可能会超过十位,这一点加法就不用考虑了
26 Digit++;//进位,位数加一
27 }
28 }
29 for (int i = Digit - 1; i >= 0; i--)//以Digit为倒序指针来倒序输出
30 {
31 printf("%d", Factorial[i]);
32 }
33 return 0;
34 }

上面是独立的大数阶乘实现,由于是从已知数一步一步累乘,所以比大数乘法实现更简洁简单

下面是阶乘整合大数的加法

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int* Factor(int N,int* Digit)
{
int* Factorial = (int*)malloc(sizeof(int) * 1000);//堆上申请便于返回!!!,刚开始我是申请在栈上的数组,出错了wwww
memset(Factorial, 0, sizeof(Factorial));//赋值0
Factorial[0] = 1;//初始化
int Num = 0;//进位指示,初始无进位数据
//这个数组用来存储每次阶乘的结果
for (int i = 1; i <= N; i++)
{
for (int j = 0; j < *Digit; j++)
{
int Temp = Factorial[j] * i + Num;//临时数据存储,包含计算数据以及上次保存的进位数据
Factorial[j] = Temp % 10;
Num = Temp / 10;//将个位存入当前位的数组,十位的数字存入进位指示进入下一轮
}
while (Num)//进位数据若未取完,说明要顺延进位
{
Factorial[*Digit] = Num % 10;
Num = Num / 10;//对于百位及以上未取完进位数据的处理
(* Digit)++;//进位,位数加一
}
} return Factorial; }
int main()
{
int N;
scanf("%d", &N);//阶乘指标输入
int Sum[1000] = { 0 };
for (int i = 1; i <= N; i++)
{
int Digit = 1;
int* F = Factor(i,&Digit);
int Num = 0;//与上述阶乘实现一样, Num依旧为进位指标
for (int k = 0; k < Digit;k++)
{
int Temp = F[k] + Sum[k]+Num;//两数相加再加上上一轮继承来的进位数
Sum[k] = Temp % 10;//取个位
Num = Temp / 10;//取十位
}
if (Num)
{
Sum[Digit] += Num;
Num = 0;//在仅考虑十位进制的情况下可以更简单的处理
}
free(F); F = NULL;//内存回收
}
int k = 999;
for (; !Sum[k]; k--);//过滤掉前导的0
for (; k >= 0; k--)
{
printf("%d", Sum[k]);
}
return 0;
}

洛谷P1009 阶乘之和的更多相关文章

  1. 洛谷——P1009 阶乘之和

    P1009 阶乘之和 题目描述 用高精度计算出S=1!+2!+3!+…+n!(n≤50) 其中“!”表示阶乘,例如:5!=5*4*3*2*1. 输入输出格式 输入格式: 一个正整数N. 输出格式: 一 ...

  2. 洛谷P1009 阶乘之和 题解

    想看原题请点击这里:传送门 看一下原题: 题目描述 用高精度计算出S=!+!+!+…+n! (n≤) 其中“!”表示阶乘,例如:!=****××××. 输入格式 一个正整数N. 输出格式 一个正整数S ...

  3. Java实现 洛谷 P1009 阶乘之和

    import java.util.Scanner; public class 阶乘之和 { public static void main(String[] args) { Scanner sc = ...

  4. 洛谷 P1009 阶乘之和 Label:高精度

    题目描述 用高精度计算出S=1!+2!+3!+…+n!(n≤50) 其中“!”表示阶乘,例如:5!=5*4*3*2*1. 输入输出格式 输入格式: 一个正整数N. 输出格式: 一个正整数S,表示计算结 ...

  5. 洛谷 P1009 阶乘之和

    题目描述 用高精度计算出S=1!+2!+3!+…+n!(n≤50) 其中“!”表示阶乘,例如:5!=5*4*3*2*1. 输入输出格式 输入格式: 一个正整数N. 输出格式: 一个正整数S,表示计算结 ...

  6. P1009 阶乘之和

    P1009 阶乘之和 题目提供者洛谷OnlineJudge 标签数论(数学相关)高精1998NOIp提高组NOIp普及组 难度普及- 通过/提交1139/3791 提交该题 讨论 题解 记录 题目描述 ...

  7. AC日记——阶乘之和 洛谷 P1009(高精度)

    题目描述 用高精度计算出S=1!+2!+3!+…+n!(n≤50) 其中“!”表示阶乘,例如:5!=5*4*3*2*1. 输入输出格式 输入格式: 一个正整数N. 输出格式: 一个正整数S,表示计算结 ...

  8. P1009 阶乘之和 洛谷

    https://www.luogu.org/problem/show?pid=1009 题目描述 用高精度计算出S=1!+2!+3!+…+n!(n≤50) 其中“!”表示阶乘,例如:5!=54321. ...

  9. 【洛谷】P1009阶乘之和

    题目链接:https://www.luogu.org/problemnew/show/P1009 题意:给一个整数n(n<50),求$ \sum^{n}_{i=1} i! $ 题解:我..拿py ...

  10. 【洛谷】P1009 阶乘之和——高精度算法

    题目描述 用高精度计算出S = 1! + 2! + 3! + - + n!  ( n ≤  50 ) S = 1! + 2! + 3! + - + n! ( n ≤ 50 ) 其中"!&qu ...

随机推荐

  1. 版本升级 | v1.0.11 上线,你的需求被翻牌了吗?

    叮咚-综合我们接到的各种用户反馈,OpenSCA 项目组在 1.0.10 的基础上迭代了 1.0.11 版本 升级功能 优化 Java 解析逻辑 支持打印结果概览及常见报错信息到终端界面 支持输出 C ...

  2. 简单讲透Mac环境下多版本python的环境变量设置,仅对小白生效

    windows下设置多版本的python管理相对容器,一切都是可视化的,但linux和mac下的python多版本对于小白来说,可能就没那么容易理解了. python多版本安装的问题 假如,首次安装了 ...

  3. java进阶(22)--Collection接口

    一.基本概念呢 1.Collection在没有使用泛型之前的,Collection中可存储所有Object所有子类型 使用泛型后,Collection只能存储某个具体类型.   二.collectio ...

  4. Jquery - 获取所有子节点 ( 并删除 )

    1,获取所有子节点   $(".parent").find('.child') 2,获取所有子节点,通过上层 div 的类名 , 获取上层 div 节点 $(".pare ...

  5. [转帖]MySQL运维实战(2)MySQL用户和权限管理

    https://segmentfault.com/a/1190000044514403 作者:俊达 引言 MySQL数据库系统,拥有强大的控制系统功能,可以为不同用户分配特定的权限,这对于运维来说至关 ...

  6. 一个监控数据的思考-sockets_used

    一个监控数据的思考-sockets_used 背景 最近跟踪一个项目问题. Grafana的监控了里面有一个tcp的使用监控 CurrEstab 的数据量是: 700-2000 左右 但是同时有一个非 ...

  7. 通过Environment获取属性文件的值,竟然会调用到JNDI服务!!!

    一.背景介绍 某应用在压测过程机器cpu使用率超过80%,通过在线诊断工具进行CPU采样生成的火焰图,看到程序中频繁调用environment.getProperty()获取属性值,而其内部调用了Jn ...

  8. 从源代码构建TensorFlow流程记录

    京东科技隐私计算产品部 曹雨晨 为什么从源代码构建 通常情况下,直接安装构建好的.whl即可.不过,当需要一些特殊配置(或者闲来无事想体会 TensorFlow 构建过程到底有多麻烦)的时候,则需要选 ...

  9. 【字符串,哈希】【Yandex】Yandex7736

    2023.6.30 Problem Link 定义一个串 \(S\) 是好的,当且仅当 \(S\) 可以不断消去相邻两个相同字符直至消空.给定一个长为 \(n\) 的字符串 \(s\),求有多少个有序 ...

  10. css3中的圆角border-radius

    css3的属性应该加上浏览器前缀 不同的浏览器内核不同,因此css的前缀不同. 常见的几种浏览器内核 火狐浏览器 Geoko内核 前缀是 -mox- 谷歌浏览器, Webkit内核 前缀是 -wekb ...