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('.');            

附上運行結果吧


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM