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();
    }
    }
    }
     
     
  • 相关阅读:
    Kafka发送到分区的message是否是负载均衡的?
    SpringCloud使用Feign出现java.lang.ClassNotFoundException: org.springframework.cloud.client.loadbalancer.LoadBalancedRetryFactory异常
    JDBC Mysql 驱动连接异常
    Mysql启动失败解决方案
    前段时间在微信公众号写的文章
    Java线程wait和sleep的区别
    nginx配置反向代理
    分布式锁的几种实现方式
    java四种修饰符的限制范围
    传值&传值引用
  • 原文地址:https://www.cnblogs.com/tangge/p/2233028.html
Copyright © 2011-2022 走看看