一道题目,我不会做.

pikecabbage 2010-11-02 06:31:36
这个是 <<程序抽象思维,c语言描述>> 上面的题目,
希腊数学家们对本身等于它的真约数之和的数特别感兴趣(N的真约数是比N本身小的约数)。他们称这些数位完全数,例如6是一个完全数,因为它的约数,1 2 3的和是6,28也是完全数,因为它的约数1 2 4 7 14 的和是28。

编写一个谓词函数IsPerfect函数,读入一个整数n,当n是完全数是返回TRUE,否则返回FALSE,写一个调用IsPerfect函数的main函数进行测试,测试1-9999中的数是否是完全数,如果是将其显示在屏幕上,输出的前两行应为6 和28,您的程序还应该定义其他两个完全数。
...全文
260 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
svtanto 2010-11-02
  • 打赏
  • 举报
回复
其实是简单的题目,以下代码供参考。C语言应该是简洁明了的,另外如果能从数学的角度去考虑,也许可以写出更少的代码实现。编译环境Mac。

#include <stdio.h>

#define FALSE 0
#define TRUE 1

int IsPerfect(const int number);

int main(const int argc, const char *argv[])
{
for (int i = 2; i < 9999; ++i) {
if (IsPerfect(i) == TRUE) {
printf("%-6d", i);
}
}
return 0;
}

int IsPerfect(const int number)
{
int sum = 0;
for (int i = 1; i < number; ++i) {
sum+= number % i == 0? i : 0;
}
return sum == number? TRUE : FALSE;
}
dalton23 2010-11-02
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 p0303230 的回复:]

最后的“getchar();"应该不要把!
[/Quote]
某些编译平台(IDE)在运行程序时并没有在程序运行后给人看结果的时间,这时候在程序最后加上getchar()就能造成程序的暂停给程序员度结果的机会。
do__i 2010-11-02
  • 打赏
  • 举报
回复
//完数等于他的真约数之和。

#include<iostream>
#include<iomanip>
const int maxsize(10000);
using namespace std;



int Isperfect(int n)
{
int j,sum=0;
for(j=1;j<n;j++)
if(n%j==0)
sum+=j;
if(sum==n) //是完全数返回1
return 1;
return 0;

}

int main()
{
int i;
for(i=1;i<maxsize;i++)
if(Isperfect(i))
cout<<setw(6)<<i<<endl;

return 0;

}

p0303230 2010-11-02
  • 打赏
  • 举报
回复
int main()
{
int i;
for(i=2;i<=9999;i++)
{
if (IsPerfect(i))
printf("%d\n",i);
}
getchar();
}

最后的“getchar();"应该不要把!
kent0122 2010-11-02
  • 打赏
  • 举报
回复
二楼的代码 把 for(int i=1;i<10000;i++)
改成 int i;
for (i=1;i<10000;i++)

你那种写法是C99标准的 有可能不能够在VC上执行!
kent0122 2010-11-02
  • 打赏
  • 举报
回复
为什么 楼上的代码在我的DEV 编译的时候显示6 C:\Dev-Cpp\main.c 'for' loop initial declaration used outside C99 mode 总是显示for 语句出错?
jacktion2004 2010-11-02
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 s_zxing 的回复:]
C/C++ code

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int IsPerfect(int number);

int main()
{
printf("the perfect number between 1 and 9999 are:\n");
for(int i=1;i<……
[/Quote]
不错。
情剑书生 2010-11-02
  • 打赏
  • 举报
回复

#include "stdio.h"

int IsPerfect(int x)
{
int sum=1;
for(int j=2;j<x;j++)
{
if(x%j==0) sum+=j;
}
if(sum==x) return 1;
else return 0;
}

int main()
{
int i;
for(i=2;i<=9999;i++)
{
if (IsPerfect(i))
printf("%d\n",i);
}
getchar();
}

结果为6 28 496 8128
S_zxing 2010-11-02
  • 打赏
  • 举报
回复

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int IsPerfect(int number);

int main()
{
printf("the perfect number between 1 and 9999 are:\n");
for(int i=1;i<10000;i++)
if(IsPerfect(i) != 0)
printf("%d\n",i);
system("pause");
return 0;
}

int IsPerfect(int number)
{
int sum = 1;
for(int i=2;i<=sqrt(number);i++)
if(number % i ==0)
sum += i+number/i;
if(sum == number)
return 1;
else
return 0;

}
Csuxiaowu 2010-11-02
  • 打赏
  • 举报
回复
尝试着去做

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧