cr:经典
题目16
一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数
思路:
因数就是乘起来等于这个数的一些数字。因数最大到这个数的一半……
考虑得有点复杂了,C站写得也很复杂,B站上qj的方法简单许多。首先是要判断这个数字是不是完数,从1开始取余,直到小于这个数本身。若是,则加起来;若不是,则不做操作。接下来计算因子之和与本身是否相同,相同则是完数,输出。最后再把这个判断的过程放到一个循环里面,从1开始判断,直到1000。
代码:
#include<stdio.h>
main()
{
int sum = 0, i, i2;
for (i = 1; i < 1001; i++) {
for (i2 = 1; i2 < i; i2++) {
if (i % i2 == 0) sum += i2;
}
if (sum == i) {
printf("%d是完数。\n", i);
}
sum = 0;
}
}
对方:
// Created by www.runoob.com on 15/11/9.
// Copyright © 2015年 菜鸟教程. All rights reserved.
//
#include<stdio.h>
#define N 1000
int main()
{
int i,j,k,n,sum;
int a[256];
for(i=2;i<=N;i++)
{
sum=a[0]=1;
k=0;
for(j=2;j<=(i/2);j++)
{
if(i%j==0)
{
sum+=j;
a[++k]=j;
}
}
if(i==sum)
{
printf("%d=%d",i,a[0]);
for(n=1;n<=k;n++)
printf("+%d",a[n]);
printf("\n");
}
}
return 0;
}
反思&收获:
对方这道题写得有些复杂了,不如qj的方法简单。
在写代码的时候还是要仔细核对每一步执行完变量的值是多少,是否需要“归零”,以避免不必要的错误!
cr:小林
例16
C语言实现输入一个大于3的整数n,判断他是否为素数 (质数)。
思路:
又是素数,再温习一次吧。输入一个数字后,要从2开始,逐个对该数取余,直到小于这个数。有取余为零则不是素数,否则是素数。
代码:
#include<stdio.h>
main()
{
int n, i, j = 0;
printf("输入一个数字:");
scanf("%d", &n);
for (i = 2; i < n; i++) {
if (n % i == 0) {
j = 1;
break;
}
}
if (j) printf("\n是合数。\n");
else printf("\n是素数。\n");
}
对方:
反思&收获:
本来以为我写的就已经够简单的了,没想到小林的更简洁……人外有人、天外有天,还需要多多努力呀!