【C语言经典100题】(12月29日-day16)

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");
}

 对方:

反思&收获: 

本来以为我写的就已经够简单的了,没想到小林的更简洁……人外有人、天外有天,还需要多多努力呀! 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜東

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值