Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中将给定的数字转换为幂_Java - Fatal编程技术网

在Java中将给定的数字转换为幂

在Java中将给定的数字转换为幂,java,Java,我有一个main函数,它调用另一个函数并将给定的数字作为参数传递。在另一个函数中,我想把给定的数分解成幂和。如何做到这一点 我的代码如下所示: public static void main() { String hello=raisetopower(in.nextInt()); } public String raisetopower(int n) { // do the logic } 说明: 假设数字为25:函数应返回5^2+0^2 如果是26:5^2+1^2我同意Richard的评论

我有一个main函数,它调用另一个函数并将给定的数字作为参数传递。在另一个函数中,我想把给定的数分解成幂和。如何做到这一点

我的代码如下所示:

public static void main()
{
String hello=raisetopower(in.nextInt());
}

public String raisetopower(int n)
{
// do the logic
}
说明:

假设数字为25:函数应返回5^2+0^2
如果是26:5^2+1^2

我同意Richard的评论,这比Java更符合数学

这个问题需要更多的信息来提供代码来辅助,比如你是否考虑最大的碱基10,以及是否所有碱基都应该在输出中,即使它们的功率为0,因为你的例子令人困惑:

假设数字为25:函数应返回5^2+0^2,如果 现在是26:5^2+1^2“

然而,考虑到这一点,希望这个例子能够有所帮助


假设您确实考虑了一个最大基数,您可以从最高基数开始到最低基数,并使用日志

如果日志结果大于或等于1,则该值应在输出中,因此减去该值并继续下一个基数

继续,直到您正好达到1的值,这应该是您的最终条件

例如,假设本例的最大基数为5,输入为27

log5 27 = 2.04781858346 
所以我们在输出中有5^2,从输入中减去它,你可以使用floor来提取'2'

log4 2 = 0.5 
小于1所以不是整数次幂

log3 2 = 0.630929753571 
log2 2 = 1 
小于1所以不是整数次幂

log3 2 = 0.630929753571 
log2 2 = 1 
当大于或等于1时添加到输出,当正好为1时终止

如果您只显示大于或等于1的基数(这是不清楚的),此时您的输出将是:

27 = 25^2 + 2^1
您可以使用一个
StringBuilder
或一个保存基础和能力的定制对象的有序集合来更容易地生成输出


下面是我的上述算法的一个示例:

import java.util.Scanner;

public class NumberToPowerConversion {
    public static void main(String[] args) {
        int maxBaseToConsider = 5;
        System.out.println("Input number to convert: ");
        Scanner input = new Scanner(System.in);
        int number = input.nextInt();
        StringBuilder output = new StringBuilder("Represented as powers: " + number + " = ");

        for(int base = maxBaseToConsider; base >= 1; base--){
            //Prevent division by 0 (log 1)
            double logResult = base > 1 ? Math.log(number) / Math.log(base) : 1;
            int floorResult = (int)Math.floor(logResult);
            if(number == 1 || logResult == 1.0){
                output.append(base + "^" + floorResult);
                number -= Math.pow(base, floorResult);
                if(number != 0){
                    //If the number couldn't be broken down completely, add the remainder to the output
                    output.append(" + " + number + "^1"); //To keep format consistent
                }
                break; //end condition reached
            }
            else if(floorResult >= 1){
                output.append(base + "^" + floorResult);
                number -= Math.pow(base, floorResult);
                if(number == 0){ break; }
                else{ output.append(" + "); }
            }
        }
        System.out.println(output.toString());
    }
}

示例输出:

Represented as powers: 27 = 5^2 + 2^1
Represented as powers: 77 = 5^2 + 4^2 + 3^3 + 2^3 + 1^1
Represented as powers: 234 = 5^3 + 4^3 + 3^3 + 2^4 + 1^1 + 1^1
Represented as powers: 99 = 5^2 + 4^3 + 3^2 + 2^0
Represented as powers: 1 = 5^0
/*算法:

我我在这里找到了这个问题的解决方案:

这实际上是一个数学问题,而不是Java编程,请提供解决此问题的算法。@SanjeevSaha如果是27:3^3+0^1,那么赋予
0
1
的幂的原因是什么?这里没有“将给定的数字转换为幂”。事实上,这个问题没有明确说明。假设你真的在做素因子分解,但这确实是任何人的猜测。那么你应该在什么基础上添加
0^2
0^1
?它只是零。一个平方仍然是一,并且问题和评论中的幂比2更多。问题是关于平方,不需要其他幂。问题中没有提到平方,或者“不需要其他幂”。OP将
3^3
指定为注释中的解决方案。