0

因此,我在计算二进制扩展的 BlueJ 环境中用 Java 编写程序。但是,我似乎无法弄清楚如何在输出中添加超过 9 的幂。如果我的输入功率超过 9,程序就会出现问题,大概是因为 9 之后没有案例。

另外,我个人觉得我的程序总体上效率极低,但我今天早上才这样做,这是我看到的第一种方法,所以如果你找到一种比使用 switch case 更高效的方法,那也很棒.

到目前为止,这是我的代码。这不全是我的,但我不确定知识产权和其他东西是否适用于这里,所以把它放在那里。

    import java.util.*;
    class Binomial_Theorem_Expansion
    {
        public static void main(String args[])
        {
        Scanner s=new Scanner(System.in);
        System.out.println("Enter the value of x in (x+a)^n");
        int x=s.nextInt();
        System.out.println("Enter the value of a in (x+a)^n");
        int a=s.nextInt();
        System.out.println("Enter the value of n in (x+a)^n");
        int n=s.nextInt();
        System.out.println ("The expanded answer is");
        int r=0;
        int powx=n;
        while (r<=n)
            {
              long nCr=calculatenCr(n,r);
              if(nCr!=-1)

                 {
                    double y=Math.pow((double)x,(double)n-r);
                    double z=Math.pow((double)a,(double)r);
                    switch (powx) 
                          {
                            case 0: System.out.print ("("+nCr*y*z);
                            break;
                            case 1: System.out.print ("("+nCr*y*z+"x");
                            break;
                            case 2: System.out.print ("("+nCr*y*z+"x\u00B2");
                            break;
                            case 3: System.out.print ("("+nCr*y*z+"x\u00B3");
                            break;
                            case 4: System.out.print ("("+nCr*y*z+"x\u2074");
                            break;
                            case 5: System.out.print ("("+nCr*y*z+"x\u2075");
                            break;
                            case 6: System.out.print ("("+nCr*y*z+"x\u2076");
                            break;
                            case 7: System.out.print ("("+nCr*y*z+"x\u2077");
                            break;
                            case 8: System.out.print ("("+nCr*y*z+"x\u2078");
                            break;
                            case 9: System.out.print ("("+nCr*y*z+"x\u2079");
                            break;
                            case 10: System.out.print ("("+nCr*y*z+"x\u2071\u00B2");
                            break;
    }
    switch (r) {
        case 0: System.out.print (")"); 
        break;
        case 1: System.out.print ("y"+")");
        break;
        case 2: System.out.print ("y\u00B2"+")");
        break;
        case 3: System.out.print ("y\u00B3"+")");
        break;
        case 4: System.out.print ("y\u2074"+")");
        break;
        case 5: System.out.print ("y\u2075"+")");
        break;
        case 6: System.out.print ("y\u2076"+")");
        break;
        case 7: System.out.print ("y\u2077"+")");
        break;
        case 8: System.out.print ("y\u2078"+")");
        break;
        case 9: System.out.print ("y\u2079"+")");
        break;
    }
    r++;
    if (r<=n)
    {
                System.out.print ("+");
    }
    powx--;

}
}
    }
        public static long calculatenCr(int n,int r)
        {
                    long res=1;
                        if(n>=r)
                        {
                            res=getFact(n)/(getFact(n-r)*getFact(r));
                            return res;
                        }
                        else return -1;
                    }
                    public static long getFact(int n)
{
    long f=1;
    for(int i=n;i>=1;i--)
    {
    f*=i;
    }
return f;
}
}

感谢您的任何建设性意见。:)

4

1 回答 1

2

大概是因为9点以后就没有病例了。

您的代码使用 UNICODE 上标字符,并且您的情况仅涵盖数字 0 到 10x和 0 到 9 的y.

您可以通过定义一个产生多位数字的上标 UNICODE 转换的方法来解决此问题,并从需要产生这种表示的两个地方调用它:

switch (powx) {
    case 0: System.out.print ("("+nCr*y*z);
        break;
    case 1: System.out.print ("("+nCr*y*z+"x");
        break;
    default: System.out.print ("("+nCr*y*z+"x"+toSuperscript(powx));
        break;
}

另一个开关(即switch (r))应该以类似的方式进行转换。

您可以String toSuperscript(int n)通过生成 的十进制表示n,然后用'0''\u2070''1'等替换来'\u00B9'实现。

于 2014-09-28T13:43:11.270 回答