• 面试题:阶乘问题


    在笔试中,我想很多人都会遇到阶乘的编程题。今天突然想起自己的第一次笔试,就遇到了这样的题,还没在电脑上敲过。就随便来写一下,不知道大家在笔试的时候都写对了么?

          很多人可能都会用int ,double之类的类型来存储结果,可是这样就很容易出现溢出的情况,不信您来试试100的阶乘!
          其实回头想想,如果当初这个我用Perl,然后用bigint类型写也许就不用这么麻烦了。而且Erlang貌似也有个阶乘模块可以直接写。先抛开这些不谈,用Java,C#之类的强类型语言,我们就要考虑溢出的情况,于是就有了以下的代码。
          不过我刚才求了一次12345的阶乘,结果发现速度很慢,希望大家指教有没有什么效率更高一些的算法。
     
    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();
    }
    }
    }
     
     
  • 相关阅读:
    phpstorm设置断点调试(转载)
    tp5引用样式路径没反应(转载)
    thinkphp5 关于加载静态资源路径问题(下载)
    jQuery多次选中checkbox失效(转载)
    redis的持久化及配置
    mysql+es+fastdfs+MongoDB的备份及灾备
    es的集群加密码
    redis-cluster的部署安装
    tomcat的日志分割脚本
    ansible介绍
  • 原文地址:https://www.cnblogs.com/tangge/p/2233028.html
Copyright © 2020-2023  润新知