zoukankan      html  css  js  c++  java
  • 1.01和0.99的365次方的结

    最近关于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('.');            
    复制代码

    附上运行结果吧

     
     
    分类: Other
     http://www.cnblogs.com/wzyl/archive/2013/01/31/2883890.html
  • 相关阅读:
    关于SVN出现 svn working copy locked的原因及解决方法
    安装SVN客户端重启电脑之后,右键未出现SVN选项的原因
    Django—工程创建以及models数据库易错点
    tornado之文件上传的几种形式form,伪ajax(iframe)
    python 收录集中实现线程池的方法
    python 多线程,进程的理解
    python之路 序列化 pickle,json
    collections模块方法详解
    python之路 socket,socketsever初探
    SQL- 约束
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2886521.html
Copyright © 2011-2022 走看看