在Java中将给定的数字转换为幂
我有一个main函数,它调用另一个函数并将给定的数字作为参数传递。在另一个函数中,我想把给定的数分解成幂和。如何做到这一点 我的代码如下所示:在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的评论
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
指定为注释中的解决方案。