题目:一个数如果恰好等于它的(真)因子之和,这个数就被称为“完数”。例如,6的(真)因子为1、2、3,而6=1+2+3,因此6是“完数”。试编写程序,找出1000以内的所有“完数”,并按照下面格式输出其因子:
6 Its factors are 1,2,3
public class Chp2_18{
public static void main(String[] args){
for(int i = 2; i <= 1000; i++){
int sum = 1; //1一定是因数
String factors = "1";
for(int j = 2; j < i; j++){
if(i%j == 0){
sum += j;
factors = factors + "," + String.valueOf(j); //输出格式
}
}
if(sum == i) // 判断是不是完数
System.out.println(i + " Its factors are " + factors);
}
}
}
输出:
6 Its factors are 1,2,3
28 Its factors are 1,2,4,7,14
496 Its factors are 1,2,4,8,16,31,62,124,248
deepseek:
public class PerfectNumbers {
public static void main(String[] args) {
System.out.println("1000以内的完数有:");
for (int num = 2; num <= 1000; num++) {
if (isPerfectNumber(num)) {
printFactors(num);
}
}
}
// 判断一个数是否是完数
public static boolean isPerfectNumber(int num) {
int sum = 0;
for (int i = 1; i < num; i++) {
if (num % i == 0) {
sum += i;
}
}
return sum == num;
}
// 打印完数及其因子
public static void printFactors(int num) {
System.out.print(num + " Its factors are ");
// 先收集所有因子
StringBuilder factors = new StringBuilder();
for (int i = 1; i < num; i++) {
if (num % i == 0) {
if (factors.length() > 0) {
factors.append(",");
}
factors.append(i);
}
}
// 输出因子(用中文逗号分隔)
String output = factors.toString().replace(",", ",");
System.out.println(output);
}
}
所以为什么不一开始就用中文逗号...
tips:
1. StringBuilder(deepseek)
StringBuilder 的常用方法
| 方法 | 说明 |
|---|---|
append(String str) | 在末尾追加字符串 |
insert(int offset, String str) | 在指定位置插入字符串 |
delete(int start, int end) | 删除指定范围的字符 |
replace(int start, int end, String str) | 替换指定范围的字符串 |
reverse() | 反转字符串 |
toString() | 转换为 String 对象 |
length() | 返回当前长度 |
charAt(int index) | 返回指定位置的字符 |
2. replace不需要保持长度一致
3. StringBuilder不是String,需要用toString转换,但是println和字符串拼接(+)时会自动调用toString()
4. StringBuilde和r字符串拼接对比
StringBuilder 的主要特点
-
可变性:可以动态修改内容(追加、插入、删除等),而不会产生大量临时对象。
-
高效性:适用于大量字符串拼接的场景(例如循环拼接)。
-
非线程安全:与
StringBuffer不同,StringBuilder不保证线程安全,但因此性能更高。
(如果需要在多线程环境下使用,改用StringBuffer
使用StringBuilder可以避免 String 的频繁拼接:如果用 String 直接 + 拼接,每次都会创建新对象,影响性能:factors = factors + "," + String.valueOf(j);
7319



被折叠的 条评论
为什么被折叠?



