![](/img/trans.png)
[英]how to get any integer in a sorted array of size n that appear more than n/k times, given that 0 < k < n, and in O(k log n) time in java?
[英]How to compute approximate natural log of 2 n times in java?
指令是: 1. 通过将系列中的 n 项相加来计算 2 的 ln。 a) 你可以用一个级数来近似 2 的自然对数。 你使用的术语越多,你就越接近 2 的自然对数。 b) ln 2 = 1 - 1/2 + 1/3 - 1/4 + 1/5 - ... 1/nc) 你需要使用 For 循环来解决这个问题 d) 对于这个程序,你将只传递 1 个参数,即 n 的值。 e) 您需要弄清楚如何为每个连续的术语更改符号。 这并不难,但需要一些思考。
如果这听起来不太好,请原谅我,我的英语不是最好的。 到目前为止,我的代码是这样的:即使我知道我做错了很多。 我知道这是错误的,但我不知道从哪里开始或如何更改标志。 起初我认为我们需要找到不同数字的 ln,但后来知道它是输入 n。 编辑:我相信我知道我做错了什么主要部分。 我尽我所能解决了这个问题。 我现在有点卡住了,因为我在脑子里玩弄逻辑,我相信它应该有效。 相反,它打印出来的只是 1.0 1.0 1.0 1.0 1.0
谁能帮忙指出我做错了什么?
公共类 aprox_log {
static double findLog (int n)
{
double ln = 1;
for (int i = 1; i <= n; i++)
{
for (int k = 0; i <= n; k++) {
if ((k%2) == 0)
ln = ln - (1/i);
ln = ln + (1/i);
}
}
return 1 - ln;
}
public static void main(String[] args) {
//These lines print the results of test inputs.
System.out.println(findLog(2)); //~0.69314718056
System.out.println(findLog(5)); //~1.60943791243
System.out.println(findLog(10)); //~2.30258509299
System.out.println(findLog(9)); //~2.19722457734
System.out.println(findLog(1)); //0
}
}
新代码:
public class aprox_log {
static double findLn (int n)
{
double ln = 0;
for (int i = 1; i <= n; i++)
{
if (i%2 == 0)
ln = ln - (1/i);
ln = ln + (1/i);
}
return ln;
public static void main(String[] args) {
//These lines print the results of test inputs.
System.out.println(findLn(2)); //0.5
System.out.println(findLn(5)); //0.783333333
System.out.println(findLn(10)); //0.64563492063
System.out.println(findLn(9)); //0.74563492063
System.out.println(findLn(1)); //1
}
}
`
要找到具有n
项的交替调和级数的总和,只需遍历从 1 到n
的整数。 然后,如果是奇数,则加上当前数的倒数,如果是偶数,则减去该数的倒数。
static double findLog(int n){
double res = 0;
for(int i = 1; i <= n; i++) res += 1d / (i % 2 == 0 ? -i: i);
return res;
}
在 Java 中,运算符/
以给定数字的精度计算结果。 特别是,如果我们将两个int
,结果将表示为int
,如果结果不能准确表示,则向 0 舍入。 也就是说, 1 / 2
是0
。
如果您需要浮点精度,则应使用浮点数,例如将i
声明为double
类型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.