1.01与0.99法则的算法

最近关于1.01和0.99的365次方的结果燃爆了网络,大家一致推崇为年底正能量。个人对这些文字游戏不甚感冒。不过这的确让我对其算法有了兴趣。

之前在园子里看到过大数据相乘的算法,这个应该类似吧,只是多了小数点而已。

一下是我写的代码,首次发,望轻喷。

            //参数合法性检查略

            //去除正负号和小数点

            string first = double1.TrimStart('-').Replace(".","");

            string second = double2.TrimStart('-').Replace(".","");

            //计算

            int len = first.Length+second.Length;

            int[] res = new int[len];//存储结果

            int t1; int t2;int t3; int SureChar; int JinWeiChar;

            for (int i = second.Length-1; i >=0; i--)

            {

                JinWeiChar=0;

                for (int j = first.Length-1; j >=0; j--)

                {

                    t1 = Int32.Parse(second[i].ToString());

                    t2 = Int32.Parse(first[j].ToString());

                    t3=t1*t2+JinWeiChar+res[i+j+1]; //这里跟小学学的乘法不一样,书上的乘法是先逐位相乘最后统一求和,这里是一位相乘后直接加上次的结果。

                    SureChar = t3 % 10;

                    JinWeiChar = t3 /10;

                    res[j+i+1] = SureChar;

                    if(j==0)

                    {

                        res[j+i]=JinWeiChar;

                    }

                }

                

            }

            //整型数组变字符串方便后面操作

            StringBuilder sb=new StringBuilder();

            foreach (int i in res)

            {

                sb.Append(i.ToString());

            }

            //算小数点

            int dot = 0;

            if (double1.Contains('.'))

                dot +=double1.Length-1- double1.IndexOf('.');

            if (double2.Contains('.'))

                dot += double2.Length - 1 - double2.IndexOf('.');

            sb.Insert(len - dot, ".");

            //去多余的0

            string result= sb.ToString();

            string[] arr = result.Split('.');

            arr[0]=arr[0].TrimStart('0');

            arr[1]=arr[1].TrimEnd('0');

            if (string.IsNullOrEmpty(arr[0]))

                arr[0] = "0";

            result = arr[0].ToString() + "." + arr[1].ToString();

            //加正负号

            if (double1.StartsWith("-") ^ double2.StartsWith("-"))

                result = "-" + result;

            return result.Trim('.');            

附上运行结果吧

1.01与0.99法则的算法

你可能感兴趣的:(算法)