c - 寻找完美数的程序:输出错误。完美数是因数之和等于给定数的数
问题描述
#include<stdio.h>
#include<math.h>
int main()
{
int rem, num, i, sum;
sum=0;
num=28;
for(i=1;i<num;i++)
{
if(num%i==0)
{
rem=num%i;
sum=sum+rem;
}
}
if(sum==num)
{
printf("perfect number");
}
else
printf("not perfect");
}
解决方案
你为什么要这样做,你需要得到所有适当除数的总和(自然数的适当除数是严格小于数字的除数)num
,但是你正在做的是加rem = num%i
,基本上总是0
因为可以被你检查的num
内容整除,所以你所做的没有任何意义i
if
if(num%i==0)
{
rem=num%i; // here `rem` is always `0` as `num%i == 0`
sum=sum+rem;
}
相反,您的逻辑应该如下所示,因为除数是,所以i
您应该在您的i
num
i
sum
if(num%i==0)
{
sum = sum + i;
}
推荐阅读
- python - 创建一个包含打印输出和绘图的文件
- google-cloud-storage - 存储异常:服务器@
.iam.gserviceaccount.com 没有 storage.buckets.create 对项目的访问权限 - javascript - 尝试截屏时出现 WebDriverException
- java - 按两个实体搜索不适用于 JpaRepository
- unity3d - 为什么播放器在使用 Animator 播放动画剪辑时会摔倒?
- laravel - 传递给 Spatie\Searchable\SearchResult::__construct() 的参数 2 必须是字符串类型,给定 null
- yaml - 多站点 TYPO3 v9,一个根页面上的多个域的不同 robots.txt
- scala - 将 Scala 流转换为流的操作符或方法(给定流的后缀)
- ffmpeg - 用 FFMPEG 转换 *.OMG
- python - Python 中的二级内存索引表示