求和
有明确次数范围,用for循环
用i += 1
算1/n 加起来
自己写的:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int i;
int sum = 0;
for ( i = 1; i <= n; i += 1)
{
sum += (1/i);
}
System.out.println(sum);
}
}
输入3输出1
错:
1.总和是浮点数(double)
double sum = 0.0;
2.除法要浮点数
<pre name="code" class="java"> sum += 1.0/i;
改良:
3.i可以在for定义 for (int i = 1;i <= n; i += 1)
4.不用括号也可以
sum += 1.0/i;
5.i++
for (int i = 1;i <= n; i ++)
修改后
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
double sum = 0.0;
for (int i = 1;i <= n; i ++)
{
<pre name="code" class="java"> sum += 1.0/i;
} System.out.println(sum); }}
改善:保留小数点2位
System.out.printf( "%.2f",sum);
最终,两个都看一下
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
double sum = 0.0;
for (int i = 1;i <= n; i ++)
{
sum += 1.0/i;
}
<p class="p1"><span> </span> System.<span class="s1">out</span>.println(<span class="s2">sum</span>);</p><p class="p1"><span> </span> System.<span class="s1">out</span>.printf( <span class="s3">"%.2f"</span>,<span class="s2">sum</span>);</p>
}
}
输入100
输出
5.187377517639621
5.19
System.out.printf( "%.2f",sum);
System.out.println(sum);
测试后新发现:
System.out.print(sum);
System.out.printf( "%.2f",sum);
System.out.println(sum);
System.out.print(sum);
这样,输出的后一个不会换行
输入100
输出
5.1873775176396215.195.187377517639621
5.187377517639621
System.out.println(sum);
println换行作用的是后一个输出
改题:如果不是求和,是-一个+一个怎么写(或者想成加一个正的,加一个负的)
自己写的(思路1):
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
double sum = 0.0;
for (int i = 1;i <= n; i ++)
{
if (i % 2 == 0 )
{
sum -= 1.0/i;
}
else
{
sum += 1.0/i;
}
}
System.out.println(sum);
System.out.printf( "%.2f",sum);
}
}
老师后来也提到这个思路,与自己想稍有不同:
if (i % 2 == 1 )
{
sum += 1.0/i;
}
else
{
sum -= 1.0/i;
}
老师讲的(思路2)——比自己的简洁好多:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
double sum = 0.0;
int sign = 1;
for (int i = 1;i <= n; i += 1)
{
sum += sign * 1.0/i;
sign = -sign;
}
System.out.println(sum);
System.out.printf( "%.2f",sum);
}
}
改良——移动sign的动作:
for (int i = 1;i <= n; i += 1,sign = -sign)
{
sum += sign * 1.0/i;
}
留意:
1.中间用逗号
2.删掉分号
循环体和第三部分可以互换