Mo *_*tic 3 java repeat exponent
我一直在尝试用Java编写一个简单的函数,它可以在不使用循环的情况下计算第n个幂的数字.
然后我发现Math.pow(a,b)类......或者方法仍然无法区分这两个与理论不太相关的东西.所以我写了这个..
public static void main(String[] args) {
int a = 2;
int b = 31;
System.out.println(Math.pow(a, b));
}
Run Code Online (Sandbox Code Playgroud)
然后我想制作我自己的Math.pow而不使用循环我希望它看起来比循环更简单,比如使用某种类型的重复我做了很多研究直到我遇到了commons-lang3包我试过使用StringUtils.repeat
到目前为止,我认为这是语法: -
public static String repeat(String str, int repeat)
StringUtils.repeat("ab", 2);
Run Code Online (Sandbox Code Playgroud)
我过去24小时或更长时间遇到的问题是StringUtils.repeat(String str,int 2); 重复字符串而不是输出或数字或计算.
我能做些什么来克服这个问题,还是有其他更好的方法来创建计算能力的函数?不使用循环或Math.pow
这可能很有趣,但我花了很多时间才发现StringUtils.repeat只重复字符串,这就是我试图克服它的方式.这有帮助
public static int repeat(int cal, int repeat){
cal = 2+2;
int result = StringUtils.repeat(cal,2);
return result;
}
Run Code Online (Sandbox Code Playgroud)
我可以不使用递归可能是这样的事情
public static RepeatThis(String a)
{
System.out.println(a);
RepeatThis(a);
}
Run Code Online (Sandbox Code Playgroud)
只是尝试理解部门中的java感谢您的所有评论,即使存在语法错误,只要逻辑被理解为对我有好处 :)
小智 11
O(Log(n))复杂度的另一种实现
public static long pow(long base, long exp){
if(exp ==0){
return 1;
}
if(exp ==1){
return base;
}
if(exp % 2 == 0){
long half = pow(base, exp/2);
return half * half;
}else{
long half = pow(base, (exp -1)/2);
return base * half * half;
}
}
Run Code Online (Sandbox Code Playgroud)
试试递归:
int pow(int base, int power){
if(power == 0) return 1;
return base * pow(base, --power);
}
Run Code Online (Sandbox Code Playgroud)
处理复杂度为 O(log(n)) 的 +/- 指数的函数。
double power(double x, int n){
if(n==0)
return 1;
if(n<0){
x = 1.0/x;
n = -n;
}
double ret = power(x,n/2);
ret = ret * ret;
if(n%2!=0)
ret = ret * x;
return ret;
Run Code Online (Sandbox Code Playgroud)
}
| 归档时间: |
|
| 查看次数: |
56397 次 |
| 最近记录: |