x 的 x 次方等于10,求 x
当 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));
}
}
该程序的后一个输出为检验第一个结果所用。
输出结果如下: