快速求N!
admin
2024-03-01 02:00:39

快速求N的阶乘

最近老师布置了一个作业1s内求20000!的阶乘

阶乘超过40
思路肯定就是数组,真正让我为难的是1s内。

最后想出来了一个勉强1s内。

开o2优化,x64

//#include"My_head.h"
#include
#include
#include
#include
#include     //设定插入点
#include      //字符处理
#include      //定义错误码
#include      //浮点数处理
#include         //对应各种运算符的宏
#include     //定义各种数据类型最值的常量
#include     //定义本地化C函数
#include      //定义数学函数
#include         //异常处理支持
#include         //信号机制支持
#include         //不定参数列表支持
#include         //常用常量
#include      //定义输入/输出函数
#include     //定义杂项函数及内存分配函数
#include     //字符串处理
#include      //定义关于时间的函数
#include      //宽字符处理及输入/输出
#include     //宽字符分类#pragma once
#include"My_head.h"long long maxsize;
long long nbitcount;
long long nbitcount1;
long long* init(long long n);
void mul(long long x, long long* s);
void print_arr(long long* s, long long x);int main()
{int begintime, endtime;long long* ps = NULL;long long n;printf("请输入一个非负数n\r\n");scanf("%lld", &n);begintime = clock();//计时开始if (n < 0){printf("输入错误,退出程序");exit(0);}if (n == 0)n = 1;ps = init(n);//根据n申请空间for (long long i = 1; i <= n; i++){mul(i, ps);}print_arr(ps, nbitcount);endtime = clock();	//计时结束printf("\n\nRunning Time:%dms\n", endtime - begintime);}void mul(long long x, long long* s)
{	long long temp = 0;for (long long i = maxsize-1; i >= nbitcount; i--){s[i] *= x;s[i] += temp;temp = s[i] / 100000000000000;s[i] = s[i] % 100000000000000;//记录实时位数,减少时间if (temp != 0){nbitcount1 = i - 1;if (nbitcount > nbitcount1){nbitcount = nbitcount1;}}}
}
long long* init(long long n)
{double nbitcount2 = 0;for (long long i = 1; i <= n; i++){nbitcount2 += (double)log10(i);}maxsize = ceil( ceil(nbitcount2) /14)+1;nbitcount1 = nbitcount = maxsize;nbitcount--;long long* ps = (long long*)malloc(sizeof(long long) * maxsize);for (long long i = 0; i 

最后发现控制台一打印就寄了,改成输出到文本就可以看了,具体加

1.exe >1.txt

最后发现一牛人,优化到0.014s

https://www.emath.ac.cn/algorithm/factorial.htm

这里是挑出 2和5 补0,一下子就快起来了。

相关内容

热门资讯

周波在走访所联系企业时强调 全... (来源:东北新闻网)  1月23日,省政协主席周波来到营口市,深入所联系企业走访调研,实地察看企业生...
湖北汉川 新型工业化之路越走越... 湖北银鹭食品有限公司正在满负荷生产。倪 娜摄(中经视觉) 1月8日,记者走进位于湖北汉川的保沣实业湖...
数字消费超20万亿元意味什么 当前,互联网等数字技术深度融入百姓生活,智能产品应用层出不穷,数字消费正成为经济增长的重要引擎。近日...
最新或2023(历届)浙江高考... 一、报名条件(一)同时符合下列条件的我省户籍人员,具备报名资格:1.遵守中华人民共和国宪法和法律;2...
浙江水利水电学院排名 最新或2... 所在地区:浙江,杭州学校网站:www.zjwchc.com建校时间:1962 年每年学费:3960-...