原文题目链接:
http://projecteuler.net/problem=80
翻译题目链接:
http://pe.spiritzhang.com/index.php/2011-05-11-09-44-54/81-80
通过人数:9843
这道题目和projecteuler No.64 Odd period square roots的内容差不多,代码我也基本复用的,在此就不多说了。
只想说一点,就是说无论我的理解还是中文翻译认为的都是求小数点后面100位的和,但这道题我纠结了很久才发现最后要求的是整数部分加上小数部分前99位的和...这也就是为什么我计算sqrt(2)的时候总是得481而题干中说是475了。
见代码:
package test;
import java.math.*;;
public class Main
{
public static void main( String args[] )
{
BigDecimal N2 = new BigDecimal(2);
BigDecimal N = new BigDecimal(1);
int ans=0;
for (int i=2;i<=100;i++)
{
BigDecimal Ni = new BigDecimal(i);
while(true)
{
BigDecimal NN = N.multiply(N);
NN = NN.add(Ni);
NN = NN.divide(N2);
NN = NN.divide(N, 200, BigDecimal.ROUND_FLOOR);
if (NN.equals(N))
break;
N = NN;
}
BigDecimal NN=N.multiply(N);
if (NN.setScale(0, BigDecimal.ROUND_FLOOR).equals(Ni))
continue;
String t = N.toString();
int temp_n = 0;
for (int j=0;;j++)
{
char temp_c = t.charAt(j);
if (temp_c < '0' || temp_c > '9')
continue;
temp_n++;
ans += temp_c - '0';
if (temp_n==100)
break;
}
}
System.out.print(ans+"\n");
}
}
以上只是我做题时的解法。
如果有更好的解法、更好的思路,欢迎评论讨论~O(∩_∩)O~