當 x 的 x 次方為10時,求 x 的值,精確到小數位后9位
過程如下:
2 的 2 次方 小於 10;
3 的 3 次方 大於 10;
因此 x 在 2 到 3 之間。
找出整數部分后,需要計算出小數部分,然后把兩部分加到一個串里即可(可以以串的形式輸出,也可以轉成浮點數輸出,下面的程序是以串的形式輸出的)。
用試探法來做,過程如下:
小數點后第一位,從 0 開始,加在整數部分后面組成一個新數 y,如果 y 的 y 次方小於 10,把 0 去掉,加上 1,......
依次往下加,直到 y 的 y 次方大於 10,即可確定 x 的小數部分的第一位為當前數字的前一位。
例如:
2.1 的 2.1 次方 小於 10;
2.2 的 2.2 次方 小於 10;
……
2.5 的 2.5 次方 小於 10;
2.6 的 2.6 次方 大於 10;
因此,小數第一位是 5,當前 x 為 2.5……。
同理,即可求出小數部分的第 2 到 9 位。
程序如下:
//2017.03.16 by 迷糊狐狸
public class Test { static String s = ""; static String f(double d){ for(int i=1; i<d; i++){ if(Math.pow(i, i)>=d){ s = f(9, i-1, d); break; } } s = s.charAt(0) + "." + s.substring(1); return s; } static String f(int k, int n, double p){ s = s + n; if(k<=0)return s; String s1 = s.charAt(0) + "." + s.substring(1); String s2 = ""; for(int i=1; i<=10; i++){ double d = Double.parseDouble(s1 + i); if(Math.pow(d, d)>p){ s2 = f(k-1, i-1, p); s = n + f(k-1, i-1, p); break; } } s = s2; return s; } public static void main(String[] args) { String s = f(10); System.out.println(s); double d = Double.parseDouble(s); System.out.println(Math.pow(d, d)); } }
該程序的后一個輸出為檢驗第一個結果所用。
輸出結果如下: