在笔试中,我想很多人都会遇到阶乘的编程题。今天突然想起自己的第一次笔试,就遇到了这样的题,还没在电脑上敲过。就随便来写一下,不知道大家在笔试的时候都写对了么?
很多人可能都会用int ,double之类的类型来存储结果,可是这样就很容易出现溢出的情况,不信您来试试100的阶乘!
其实回头想想,如果当初这个我用Perl,然后用bigint类型写也许就不用这么麻烦了。 而且Erlang貌似也有个阶乘模块可以直接写。先抛开这些不谈,用Java,C#之类的强类型语言,我们就要考虑溢出的情况,于是就有了以下的代码。
不过我刚才求了一次12345的阶乘,结果发现速度很慢,希望大家指教有没有什么效率更高一些的算法。

Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("请输入你要计算的数字:");
long n = Convert.ToInt64(Console.ReadLine());
Console.Write("{0}的阶乘是:", n);
Console.WriteLine(GetResult(n));
}
static string GetResult(long n)
{
List<long> listResult = new List<long>();
listResult.Add(1);
int posCount=1;//记录总位数
for (long i = 1; i <= n; i++)
{
long carry = 0;
for (int j = 0; j < posCount; j++)
{
//先相乘
listResult[j] *= i;
//加上进位
listResult[j] += carry;
long temp = listResult[j];
//存储个位数
listResult[j] %= 10;
carry = temp / 10;
if (carry > 0 && j==listResult.Count-1)
{
posCount++;
listResult.Add(0);
}
}
}
StringBuilder sb = new StringBuilder();
for (int i = listResult.Count-1; i >=0 ; i--)
{
sb.Append(listResult[i].ToString());
}
return sb.ToString();
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!