VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1618|回复: 11

C++编完数

[复制链接]

3

主题

3

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-1-6 14:30:01 | 显示全部楼层 |阅读模式
编程求500之内的所有“完数”。所谓“完数”是一个数恰好等于它的(包括1在内的)所有不同因子之和,其各位数字立方和等于该数本身。如:6=1+2+3


结果是:1+2+3=6  1+2+3+4+7+14=28   1+2+4+8+16+31+62+124+248=496

如何编??????
回复

使用道具 举报

0

主题

73

帖子

46.00

积分

新手上路

Rank: 1

积分
46.00
发表于 2020-1-6 18:18:01 | 显示全部楼层
#include <iostream>
#include <cmath>
using namespace std;

int main() {
        for(int i = 2; i <= 500; ++i) {
                int sum = 0;
                for(int j = 1; j <= sqrt((double)i); ++j) {
                        if(0 == i % j) {
                                sum += j;
                                int j2 = i / j;
                                if(j2 != j && j2 != i)
                                        sum += j2;
                        }
                }
                if(sum == i) {
                        cout << i << endl;
                }
        }
}
回复

使用道具 举报

0

主题

3

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-7-11 15:45:01 | 显示全部楼层
我要问一下“#include <cmath>”这个头文件是用来做什么的!!?
回复

使用道具 举报

0

主题

5

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2020-7-11 21:15:01 | 显示全部楼层
cmath是新的C++标准库的用法,math.h就是过去的用法。
回复

使用道具 举报

0

主题

73

帖子

46.00

积分

新手上路

Rank: 1

积分
46.00
发表于 2020-7-15 21:30:01 | 显示全部楼层
因为我用到了了sqrt这个函数,而它是在cmath中声明的。
回复

使用道具 举报

1

主题

10

帖子

9.00

积分

新手上路

Rank: 1

积分
9.00
发表于 2020-7-29 14:30:01 | 显示全部楼层

int wanshu(int k,int num,int sum)
{
if(sum==num&&k==num) return 1;
else{
if(m/k==0)
sum+=k;
return wanshu(k+1,m,sum);
}
return 0;
}
wanshu(1,i,0);
回复

使用道具 举报

0

主题

8

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
发表于 2020-7-30 21:30:01 | 显示全部楼层
说说算法吧
我数学不是怎么明白
回复

使用道具 举报

0

主题

73

帖子

46.00

积分

新手上路

Rank: 1

积分
46.00
发表于 2020-8-1 12:30:01 | 显示全部楼层
这有啥好说的?这个程序的算法最简单直接了:找出每一个数所有的因数,然后加起来看看是不是这个数,是就说明它是个完数。——这不就是题目本身嘛。
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-8-4 16:00:03 | 显示全部楼层
[code]      1 #include<iostream>
      2 using namespace std;
      3 int main()
      4 {
      5     int i=1,j=1,sum=0;
      6     for(i=1;i<=500;i++)
      7     {
      8         sum=0;
      9         for(j=1;j<i;j++)
     10         {
     11             if((i%j)==0)
     12                 sum=sum+j;  //判断是否是完备数
     13         }
     14         if(sum==i)          //如果是输出结果
     15         {
     16             cout<<endl<<i<<"is Wan Bei Shu!"<<endl;
     17             for(j=1;j<i;j++)//输出所有的约数
     18             {
     19                 if(i%j==0)
     20                     cout<<" "<<j<<"  ";
     21             }
     22         }
     23     }
     24     cout<<endl;
     25     return 0;
     26 }
[/code]
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-8-23 22:45:01 | 显示全部楼层
#include <iostream>
using namespace std;

int main()
{
        int n;
        int sum;
        for(n=1;n<=500;n++)
        {        int sum=0;       
                for(int i=1;i<n;i++)
                {
                        if(n%i==0)
                                sum+=i;
                }
        if(sum==n)
                cout<<n<<endl;
        }
        return 0;
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表