hdu1042-N!(大数)

HDOJ 1042 N! -- 大数运算 题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1042 Problem Description Given an integer N(0 ≤ N ≤ 10000), your task is to calculate N!   Input One N in one line, process to the end of fi 阅读详情
N!

Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)
Total Submission(s): 65262    Accepted Submission(s): 18665

Problem Description
Given an integer N(0 ≤ N ≤ 10000), your task is to calculate N!
 

 

Input
One N in one line, process to the end of file.
 


Output
For each N, output N! in one line.
 


Sample Input
1
2
3
 


Sample Output
1
2
6
 

这题我写的时候大部分都会超时,最后网上看了好多,才优化到2000多ms!


在写这篇博客的时候,我问了下学长,他说他900多,当时我就崩溃了,原来他是用G++提交的!


看下代码吧!


没有优化的:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int a[36000];
int main()
{
    int n,i,j,c;
    while(scanf("%d",&n)!=EOF)
    {
        memset(a,0,sizeof(a));
        a[0]=1;
        for(i=2;i<=n;i++)
        {
            c=0;
            for(j=0;j<36000;j++)
            {
                a[j]=a[j]*i+c;
                c=a[j]/10;
                a[j]%=10;
            }
        }
        for(i=36000-1;a[i]==0&&i>=0;i--);
        if(i>=0)
        for(j=i;j>=0;j--)
        printf("%d",a[j]);
        printf("\n");
    }
    return 0;
 }


优化后:


#include<stdio.h>
#include<string.h>
int a[36000];
int main()
{
	int n,i,j,c,temp,cot;
	while(scanf("%d",&n)!=EOF)
	{
		//memset(a,0,sizeof(a));
		a[0]=1;
		cot=1;
		for(i=2;i<=n;i++)
		{
			c=0;
			for(j=0;j<cot;j++)
			{
				temp=a[j]*i+c;
				c=temp/10;
				a[j]=temp%10;
			}
			while(c)
			{
				a[cot++]=c%10;
				c/=10;//cot用来记录进位
			}
		}
		for(j=cot-1;j>=0;j--)
		printf("%d",a[j]);
		printf("\n");
	}
	return 0;
 }


后来学长又给了一种方法,300ms左右,谢谢康神教导!


就是数组的一个存5位!



上代码:

#include<stdio.h>
#include<string.h>
long long a[36000];
int main()
{
	int n,i,j,c,cot;
	int temp;
	while(scanf("%d",&n)!=EOF)
	{
		a[0]=1;
		cot=1;
		for(i=2;i<=n;i++)
		{
			c=0;
			for(j=0;j<cot;j++)
			{
				a[j]=a[j]*i+c;
				c=a[j]/100000;//每次存5位
				a[j]=a[j]%100000;
			}
			if(c>0)
			{
				a[cot]=c;
				cot++;
			}
		}
		printf("%lld",a[cot-1]);
		for(j=cot-2;j>=0;j--)
		printf("%05lld",a[j]);
		printf("\n");//因为最后面的也就是最高位不需要补0,而其他位不够5位的一定要补够才行,底下这种输出,都没补0,所以会wa
//		for(j=cot-1;j>=0;j--)
//		printf("%lld",a[j]);
//		printf("\n");
	}
	return 0;
 }



HDU1042的代码 HDU1042的C++代码,AC 立即下载

相关推荐

Keysight ADS新手必看:3分钟搞定TDR模拟的保姆级教程(附差分信号设置技巧)

本文为Keysight ADS新手提供TDR模拟的保姆级教程,详细介绍了从基础环境准备到差分信号设置的全流程。通过内置模板调用、待测器件连接和仿真结果解读,帮助用户快速掌握TDR模拟技术,特别包含差分信号配置技巧,提升信号完整性分析效率。

weixin_30872157的博客 195

HDU-1042-高精度乘法-大数阶乘

题目: 输出1~10000以内任意一个数的阶乘 思路: #include <iostream> using namespace std; typedef int *Int; const int default_len = 10001; int len = 1; void mul(int i , Int a) { int j,t,res=0; for(j = 0 ; j < len ; j++) { t = i * a[j] + res;

weixin_46028606的博客 422

ODrive0.5.5源码分析(1) ADC的处理

odrive 0.5.5 ADC

danger的博客 4307

HDU-1042(万进制)

N! Problem Description Given an integer N(0 ≤ N ≤ 10000), your task is to calculate N! Input One N in one line, process to the end of file. Output For each N, output N! in one line. Sample Input 1 2 3...

你轻轻地走了 258

详解舵机的基本原理以及控制方法

文章目录什么是舵机?伺服控制硬件连接舵机规格SG90MG90SMG996R总结 什么是舵机? 舵机是伺服电机的一种,伺服电机就是带有反馈环节的电机,我们可以通过伺服电机进行精确的位置控制或者输出较高的扭矩; 舵机也叫也叫 RC 伺服器,通常用于机器人项目,也可以在遥控汽车,飞机等航模中找到它们。 类似舵机这样的伺服系统通常由小型电动机,电位计,嵌入式控制系统和变速箱组成。 电机输出轴的位置由内部电位计不断采样测量,并与微控制器(例如STM32,Arduino)设置的目标位置进行比较; 根据相应的偏差,控制

一名热爱技术的工程师的博客。分享技术干货,记录美好生活。永远相信美好的事情即将发生。 4万+

109. 使用 SAP UI5 FileUploader 控件上传本地文件

我们可以使用SAPUI5提供的控件,将本地文件上传到远端服务器进行存储。远端服务器负责接收上传的文件的逻辑,可以采取Java,Node.js或者ABAP等任意的编程语言实现。本地文件上传也是最终用户同文件服务器交互的重要手段之一,因此文件上传这个主题,本教程会通过若干篇文章连续进行介绍。笔者还另外实现了一个不通过SAPUI5FileUploader控件,而是直接用HTML原生的input。先看本步骤完成后实现的场景。本步骤完整的源代码位置。进入目录109,运行命令行。...

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

hdu1042(大数乘法 )

计算n!(1<=n<=10000) 在去南昌icpc邀请赛之前,勋宇带着我们做过大数的题,刚好也是这个题。而我影响最深刻的就是运用到万进制,顾名思义,以一万为进制,因为n!是个很大的数,所以只能用数组去存。 ...

Bin的博客 236

【STK】手把手教你利用STK进行进行光电红外仿真02-STK/EOIR模块属性之一 传感器选项设置

EOIR传感器可以从空间几何属性、光谱属性、光学属性、辐射属性四个方面进行设置,并且可以设置信号传播路径中的大气特性,包括大气模型、气溶胶模型、气象学可见性和大气湿度。在定义EOIR传感器时,需要Sensor——Definition属性页中,将Sensor Type设置为EOIR。单击下面的按钮打开传感器的EOIR配置页,可以对传感器的属性进行配置,此外,还可以在场景中视情况添加相关的中心体。路径辐射损耗影响上述特性的计算,计算的结果考虑了传感器、目标位置的影响,但是还没考虑地球临边背景的影响。

weixin_44184852的博客 3199

求大整数的阶乘(hdu1042)

呵呵!刚刚在chinaunix注册了,这是第一篇日志,大部分借鉴的是hhccbb的算法。写的不好的,希望大牛们谅解。现在转入正题。hdu1042要求求n!,而n的值最大到10000。属于规模型解题范围,10000!的位数为35670。(一)首先,了解n!的阶乘范围:   由于int有符号型可表示的最大数为2^31-1,为2147483647。位数为10位。13!=6227020800,就已经超过了int型表示范围。   所以,需要借鉴更大存储空间的类型,可以选用__int64类型。或者利用数组存储,联系高精

追求自由的码砖人 1171

机器学习初探——用线性回归预测股价趋势

在进入代码之前,先建立一个大框架。类型一句话解释金融中的应用监督学习给机器“标准答案”让它学预测股价(历史数据→未来价格)无监督学习不给答案,让机器自己找规律把相似股票自动归类、发现异常交易强化学习让机器通过“试错”学习最优策略AI自动交易、量化策略优化我们现阶段只学“监督学习”——这是最常用、最容易上手的。准备一堆“特征”和对应的“标签”(比如:历史的第N天 → 那天的价格)喂给机器一个“算法”(比如线性回归)机器“拟合”出一个规律(比如找到一条最合适的直线)

109

YOLOv11的扩散模型去噪预处理-(在推理前对低质量图像进行增强)

摘要: 扩散模型与YOLOv11的结合有效提升了复杂场景下的目标检测性能。针对低质量图像(如噪声、低光照)导致YOLOv11特征提取退化的问题,研究提出了一种基于条件扩散模型的预处理方法。通过语义引导的渐进式去噪,在保留关键检测特征的同时,显著改善了图像质量。技术核心包括:1)利用YOLOv11浅层特征作为条件输入;2)交叉注意力机制实现任务感知去噪;3)知识蒸馏与潜空间扩散加速推理。实验表明,该方法使mAP50提升19%,在15步内达到传统百步去噪效果,平衡了精度与实时性需求,为鲁棒性目标检测提供了新思路

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 876

HDU1042(高精度模拟乘法)

方法一超时: #include<iostream> #include<algorithm> #include<cstring> #include<cmath> using namespace std; const int maxx=1e4+10; char s1[maxx],s2[maxx]; int a[maxx],b[maxx]; int c[maxx]; int n; int main(){ while(cin>>n){ a[1]

Keep_Trying_Go的博客 450

43、FMCW雷达高度计仿真

本文介绍了FMCW雷达高度计的波形级建模与仿真过程,重点模拟了着陆和倾斜两种飞行场景以评估其性能。通过结合高程数据和飞行轨迹构建雷达场景,使用自定义信号处理器分析IQ样本并估计高度。结果表明,该高度计在多数情况下满足性能要求,但也存在误差较大的点,提出了地面检测算法优化的潜在方向。

neovim7hacker的博客 135

hdu java编程题_HDU-1042-N!(Java大法好 && HDU大数水题)

N!Time Limit: 10000/5000 MS (Java/Others)Memory Limit: 262144/262144 K (Java/Others)Total Submission(s): 64256Accepted Submission(s): 18286Problem DescriptionGiven an integer N(0 ≤ N ≤ 10000),...

weixin_33603316的博客 147

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

大数运算:HDU-1042-N!(附N!位数的计算)

解题心得: 这里使用了10000进制。很明显,因为是n!所以单个最大的数是10000*10000,使用万进制。 可以借鉴高精度的加法,单个乘了之后在进位。 很坑的一点,0!=1,数学不好WA了三次,尴尬。 10000!有35660位数,求解方法如下 方法一! 可以将n!表示成10的次幂,即n!=10^M(10的M次方)则不小于M的最小整数就是 n!的位数,对该式两边取对数,有     M =lo

二营长的意大利炮友 658

精雕软件(JDpaint) 5.5 绿色版

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

hdu - 1042 - N!(高精度计算)

题意:求N!(0 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1042 ——>>简单高精度运算。只是开始用if来检查最后一个进位,WA了几次,终于发现,最后一位的产生的进位可以超过10,因为乘数不一定是1位数,需用while。 #include using namespace std; const int maxn = 40000 +

无节操 894

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

HDU 1042 N!大数乘法

N! Time Limit : 10000/5000ms (Java/Other)   Memory Limit : 262144/262144K (Java/Other) Total Submission(s) : 69   Accepted Submission(s) : 38 Problem Description            Given an integer N(0 ≤ ...

小王的博客 230

HDU1042--阶乘 N!

HDU1042:N! 大数阶乘: 几个注意点: 计算大数阶乘导BigDecimal包,不要导BigInteger包。 初始化0或者其他基础类型数字转换为BigDecimal最好用字符串。 比如初始化为0,用new BigDecimal(“0”) ; import java.util.Scanner; import java.math.BigDecimal;//注意求阶乘用的是BigDecim...

匿名攻城狮 735

HDU1042 N!(大数问题,万进制)

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1042 N! Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Submission(s): 89320    Accepted Submission(s):...

Y先森0.0 567

Hdu 1042 N! (高精度数)

Hdu 1042 N! (高精度数) Problem Description Givenan integer N(0 ≤ N ≤ 10000), your task is to calculate N! Input OneN in on...

dilan3700的博客 205

hdu 1042 大数阶乘 ,

hdu 1042 大数阶乘,  原题链接, click here.Problem DescriptionGiven an integer N(0 ≤ N ≤ 10000), your task is to calculate N!InputOne N in one line, process to the end of file.OutputFor each N, output N! in one

不念过往 , 不愧恒心 438

HDU1042 n!【大数+万进制】

N! Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total Submission(s): 86835    Accepted Submission(s): 25542 Problem Description Given an integer N(0 ≤

海岛Blog 3401

hdu_1042 N!

原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1042 分析:大数的题目,模拟乘法,我这里把个位数放在最后面的位置。。 #include #include #include #define Max 10000 #define Mod 10000 int ans[Max+1]; int main() { int n;

徵羽調_xiao賤的专栏 758

hdu1042 N!

hdu1042   N!       题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1042 大数(!!) 题目大意:n的阶乘。 题目分析:大数 代码如下: #include int main() { int m,c,a[10000],i,j,n; while(scanf("%d",&n)!=EOF) { a[0]=1; m

slicer的技术交流栈 945

HDU - 1042 N! 大数阶乘

N! HDU - 1042(点击跳转) Input One N in one line, process to the end of file. Output For each N, output N! in one line. Sample Input 1 2 3 Sample Output 1 2 6 解析 使用万进制或更高进制均可; 注意0的阶乘为1; 注意数组初始化; 输出需要用%04d; AC代码 #include<stdio.h> #include<string.h>

斯文~ 239

HDU 1042 大数问题 N!

大数问题是一种区别于普通数值问题的特殊问题,当运算的数值过大甚至包括long long int64bit都无法存储时我们就将引用到大数运算思想。 大数问题究其根本其实就是利用数组可以开到远远大于64bit的特性来存储和运算这些过大的结果,比如说一个1000位的数字自然没法使用long long int存储时我们可以考虑将这个1000位的数字拆分开来变成1000个数字,之后我们将这1000个数字像

Fantas_liuyi的博客 458
上一篇: 欧几里得算法
下一篇: Strange fuction--hdu2899
Eric_keke
博客等级 码龄12年 37粉丝 221原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值