3.分别用 do-while 和 for循环计算1+1/2!+1/3!+1/4!+…的前20项之和。 4.如果一个数恰好等于它的因子之和,则这个数称为完数。编写应用程序求1000之内的所有完数。 5.编写应用程序,使用for循环语句计算8+88+888+…的前10项之和 包
时间: 2024-10-21 08:04:10 浏览: 28
1. 使用`do-while`和`for`循环计算1+1/2!+1/3!+1/4!+…的前20项之和,可以按照以下步骤:
```java
double total = 1; // 初始值,假设第一项为1
int n = 2; // 第二项开始,从2开始计算阶乘
double factor = 1;
do {
factor /= n; // 计算1/n!
total += factor; // 加入总和
System.out.printf("%.4f", total); // 打印当前项
n++; // 提升项数
} while (n <= 20);
System.out.println("\n前20项之和:" + total);
```
或者使用`for`循环:
```java
double total = 1;
for (int i = 2; i <= 20; i++) {
double factor = 1.0 / factorial(i);
total += factor;
System.out.printf("%.4f", total);
}
// 接着添加总和和换行符
private double factorial(int n) {
if (n == 0 || n == 1)
return 1;
else
return n * factorial(n - 1);
}
```
2. 求1000之内的所有完数,首先需要遍历这范围内的每个数,检查它是否等于其因子之和。可以这样做:
```java
List<Integer> perfectNumbers = new ArrayList<>();
for (int num = 2; num < 1001; num++) {
int sumFactors = 0;
for (int i = 1; i <= num / 2; i++) {
if (num % i == 0) {
sumFactors += i;
}
}
if (sumFactors == num) {
perfectNumbers.add(num);
}
}
System.out.println("1000之内的完美数有:");
for (int perfect : perfectNumbers) {
System.out.println(perfect);
}
```
3. 计算8+88+888+…的前10项之和,可以创建一个字符串数组,并通过循环替换每一位数字:
```java
String pattern = "8";
int count = 0;
double sum = Double.parseDouble(pattern); // 初始值为8
for (int i = 1; i <= 9; i++) {
pattern = pad(pattern, i); // 增加一位
sum += Double.parseDouble(pattern); // 加上新数值
System.out.printf("%.2f", sum);
count++;
if (count % 10 == 0) { // 每10项换行
System.out.println();
}
}
private String pad(String str, int times) {
StringBuilder sb = new StringBuilder(str);
for (int j = 0; j < times; j++)
sb.append('8');
return sb.toString();
}
```
阅读全文