大数的阶乘
直接上代码:
## C语言:
```
#include <stdio.h>
#include <time.h>
//给计算结果一个数组,并指定大小为4096
//第一次写程序使用的字符串保存大数,但是有个问题,需要char到int来回转换,影响计算性能。
//所以使用数组来保存数据,方便计算
int jieguo[4096] = {0};
//数组长度
int len = 0;
//fac为计算阶乘的函数,计算结果存储在jieguo[4096]数组中
int fac(int n)
{
int v = 0;
int f = 0;
//初始化jieguo数组和数组长度
jieguo[0] = 1;
len = 1;
for(int i = 1; i <= n; i++)
{
for(int j = len - 1; j >= 0; j--)
{
v = i * jieguo[j];
jieguo[j] = v % 10;
v = v / 10;
f = j + 1;
//如果v大于0,说明还要进位,所以将进位的数加上原来的数,判断进位后存储。
//为了提高效率,使用for进行循环
for(; v > 0 && f < len; f++)
{
v = v + jieguo[f];
jieguo[f] = v % 10;
v = v / 10;
}
//如果这时f等于数组的长度len并且v还大于0,说明需要增加jieguo数组的长度
//为了提高效率,仍然使用for进行循环
for(; v > 0;)
{
jieguo[len] = v % 10;
v = v / 10;
len++;
if(len > 4096 - 2)
{
//这个时候说明数组长度不够,需要增加jieguo后面的数值
//计算100的阶乘的数组长度为158,计算1000的阶乘的数组长度为2568。
//可以根据实际需要进行设置。
return 1;
}
}
}
}
return 0;
}
//下面写主函数
int main(void)
{
int num;
printf("请输入需要计算阶乘的数字:");
scanf("%d", &num);
//计算阶乘结果
int r = fac(num);
//如果返回1,则说明数组长度不够,需要增加长度
if(r == 1)
{
printf("计算结果太大,请增加数组长度!\n");
return 0;
}
printf("%d的阶乘为:", num);
for(int i = len - 1; i >= 0; i--)
{
printf("%d", jieguo[i]);
}
printf("\n");
printf("%d\n", len);
printf("运行时间:%.2lf秒\n", (double)clock() / CLOCKS_PER_SEC);
printf("\n");
return 0;
}
```
## golang:
```
package main
import "fmt"
import "time"
const m int = 4096
func fac(n int) ([m]int, int) {
var jieguo [m]int
var len int
var v, f = 0, 0
jieguo[0] = 1
len = 1
for i := 1; i <= n; i++{
for j := len - 1; j >= 0; j--{
v = i * jieguo[j]
jieguo[j] = v % 10
v = v / 10
f = j + 1
for ; v > 0 && f < len; f++ {
v = v + jieguo[f]
jieguo[f] = v % 10
v = v / 10
}
for ; v > 0; len++ {
jieguo[len] = v % 10
v = v / 10
if len > m - 2 {
fmt.Println("error!")
return jieguo, len
}
}
}
}
return jieguo, len
}
func main() {
a := 10000
startTime := time.Now()
f, len := fac(a)
fmt.Printf("%d的阶乘为:", a)
for i := len - 1; i >= 0; i-- {
fmt.Print(f[i])
}
fmt.Print("\n")
fmt.Println(len)
t := time.Since(startTime)
fmt.Println(t.Seconds())
}
```
- 共 0 条回复
- 需要登录 后方可回复, 如果你还没有账号请点击这里注册。
wiseAI
✨ 梦初醒 茅塞开
- 不经他人苦,莫劝他人善。
- 能量足,心态稳,温和坚定可以忍。
- 辛苦决定不了收入,真正决定收入的只有一个,就是不可替代性。
- 要么忙于生存,要么赶紧去死!
- 内心强大到混蛋,比什么都好!
- 规范流程比制定制度更重要!
-
立志需要高远,但不能急功近利;
行动需要迅速,却不可贪图速成。 - 不要强求人品,要设计高效的机制。
-
你弱的时候,身边都是鸡零狗碎;
你强的时候,身边都是风和日丽。 - 机制比人品更可靠,契约比感情更可靠。
- 合作不意味着没有冲突,却是控制冲突的最好方法。
- 误解是人生常态,理解本是稀缺的例外。
- 成功和不成功之间,只差一次坚持!
- 祁连卧北雪,大漠壮雄关。
- 利益顺序,过程公开,机会均等,付出回报。
