好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

1.01和0.99的365次方的结

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://HdhCmsTestcnblogs测试数据/wzyl/archive/2013/01/31/2883890.html

作者: Leo_wl

    

出处: http://HdhCmsTestcnblogs测试数据/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于1.01和0.99的365次方的结的详细内容...

  阅读:42次

上一篇: IOS 文件管理

下一篇:案例