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