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));
    }

}

 该程序的后一个输出为检验第一个结果所用。

输出结果如下:

 

posted @ 2017-03-16 21:06  迷糊狐狸  阅读(2565)  评论(1编辑  收藏  举报