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次方的结的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did46957