unity3d 1-100 阶乘的精准大数

using System;
using System.Text;

namespace ConsoleApplication1
{
    internal class Program
    {
        public static void Main(string[] args)
        {
            var result = "1";
            for (var i = 2; i < 101; i++)
            {
                result = GetResult(result, i.ToString());
            }
            Console.WriteLine(result.Length);
            Console.WriteLine(result);
        }

        private static string GetResult(string s1, string s2)
        {
            var lastResult = "";
            var ten1 = -1;
            var result = new int[s1.Length + s2.Length]; //用以记录计算结果
            for (var i = s1.Length - 1; i >= 0; i--)
            {
                int c1 = Convert.ToInt16(s1[i].ToString()); //从s1中从后往a前取一个数并记录这个数的位置
                ten1++;
                var resultindex = result.Length - 1 - ten1;
                for (var j = s2.Length - 1; j >= 0; j--)
                {
                    int c2 = Convert.ToInt16(s2[j].ToString()); //从?s2中从后往前取一个数
                    var cc = c1*c2 + result[resultindex];
                    if (cc > 10)
                    {
                        result[resultindex] = cc%10;
                        var lastindex = resultindex - 1; //往前移动一位
                        var lastvalue = result[lastindex] + cc/10; //把刚刚得到的十位的数字赋值到前面
                        while (cc > 10)
                        {
                            cc = result[lastindex] + cc/10;
                            result[lastindex] = cc%10;
                            lastindex--; //进位
                        }
                    }
                    else
                    {
                        result[resultindex] = cc;
                    }
                    resultindex--; //进位
                }
            }
            var sb = new StringBuilder();
            foreach (var item in result)
            {
                sb.Append(item);
            }
            lastResult = sb.ToString();
            if (lastResult[0] == '0')
            {
                lastResult = lastResult.Substring(1);
            }
            return lastResult;
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值