zoukankan      html  css  js  c++  java
  • 面试题:阶乘问题

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

          很多人可能都会用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();
    }
    }
    }
     
     
  • 相关阅读:
    ASP.NET MVC之从控制器传递数据到视图四种方式
    MVC发布到IIS,出现HTTP 错误 404.0
    超详细MySQL安装及基本使用教程
    node.js中使用node-xlsx插件生成excel数据并导出
    jquery给一组radio赋值和取值
    node.js生成excel下载各种方法分析对比--附excel-export方法
    JS中substr和substring的区别
    jq触发a标签的href跳转
    jq中跳出方法、for循环和each循环
    IIS应用程序池频繁崩溃的问题
  • 原文地址:https://www.cnblogs.com/tangge/p/2233028.html
Copyright © 2011-2022 走看看