33,311
社区成员
发帖
与我相关
我的任务
分享
#include<stdio.h>
#include<math.h>
int main(void) /*求完数。完数:如28 = 1 + 2 + 4 + 7 + 14,完数等于
其各因子之和*/
{
int x;
int x_j; //寄存x的值
int n;
int sum = 0;
int y;
int i = 0; //完数的个数
printf("请依次输入x,n的值(用空格隔开),我会为你输出x~n的完数。\n");
scanf("%d %d", &x, &n);
x_j = x;
if(x > n)
{
printf("输入错误,x应小于n。请重新输入。\n");
scanf("%d %d", &x, &n);
x_j = x;
}
for(; x <= n; x++)
{
for(y = 1; y <= sqrt(n); y++)
{
if(x % y == 0)
{
sum = sum + y + x / y;
if(y == sqrt(n))
{
sum -= y;
break;
}
}
else
continue;
}
if(sum == x)
{
printf("%d\n 是完数。\n", x);
i++;
}
else
continue;
}
printf("\n经统计,%d~%d一共有 %d 个完数。\n", x_j, n, i);
getchar();
return 0;
}
#include<stdio.h>
#include<math.h>
int main(void) /*求完数。完数:如28 = 1 + 2 + 4 + 7 + 14,完数等于
其各因子之和*/
{
int x;
int x_j; //寄存x的值
int n;
int sum;
int sum_j; //寄存sum
int y;
int i = 0; //完数的个数
printf("请依次输入x,n的值(用空格隔开),我会为你输出x~n的完数。\n");
scanf("%d %d", &x, &n);
x_j = x;
while(x > n || n < 0 || x < 0)
{
printf("输入错误,x应小于n。请重新输入。\n");
scanf("%d %d", &x, &n);
x_j = x;
}
for(; x <= n; x++)
{
sum = 0;
for(y = 2; y <= sqrt(x); y++) //从2开始
{
if(x % y == 0)
{
sum += y + x/y;
if(y == sqrt(x))
sum -= y;
}
else
continue;
}
sum += 1; //1是每个数的因子
if(sum == x)
{
printf("\n%d 是完数。", x);
i++; //完数个数
}
else
continue;
}
printf("\n\n经统计,%d~%d一共有 %d 个完数。\n", x_j, n, i);
getchar();
return 0;
}
#include<stdio.h>
#include<math.h>
int main(void) /*求完数。完数:如28 = 1 + 2 + 4 + 7 + 14,完数等于
其各因子之和*/
{
int x;
int x_j; //寄存x的值
int n;
int sum = 0;
int y;
int i = 0; //完数的个数
printf("请依次输入x,n的值(用空格隔开),我会为你输出x~n的完数。\n");
scanf("%d %d", &x, &n);
x_j = x;
if(x > n)
{
printf("输入错误,x应小于n。请重新输入。\n");
scanf("%d %d", &x, &n);
x_j = x;
}
for(; x <= n; x++)
{
sum =1;
for(y = 2; y <= sqrt(x); y++)
{
if(x % y == 0)
{
sum = sum + y + x / y;
if(y == sqrt(x))
{
sum -= y;
}
}
}
if(sum == x)
{
printf("%d\n 是完数。\n", x);
i++;
}
else
continue;
}
printf("\n经统计,%d~%d一共有 %d 个完数。\n", x_j, n, i);
getchar();
getchar();
return 0;
}
#include<stdio.h>
#include<math.h>
int main(void) /*求完数。完数:如28 = 1 + 2 + 4 + 7 + 14,完数等于
其各因子之和*/
{
int x;
int x_j; //寄存x的值
int n;
int sum = 0;
int y;
int i = 0; //完数的个数
printf("请依次输入x,n的值(用空格隔开),我会为你输出x~n的完数。\n");
scanf("%d %d", &x, &n);
x_j = x;
if(x > n)
{
printf("输入错误,x应小于n。请重新输入。\n");
scanf("%d %d", &x, &n);
x_j = x;
}
for(; x <= n; x++)
{
sum = 0;
for(y = 1; y <= x/2; y++)
{
if(x % y == 0)
{
sum = sum + y /*+ x / y*/;
// if(y == sqrt((float)n))
// {
// sum -= y;
// break;
// }
}
// else
// continue;
}
if(sum == x)
{
printf("%d\n 是完数。\n", x);
i++;
}
else
continue;
}
printf("\n经统计,%d~%d一共有 %d 个完数。\n", x_j, n, i);
getchar();
return 0;
}
#include<stdio.h>
#include<math.h>
int main(void) /*求完数。完数:如28 = 1 + 2 + 4 + 7 + 14,完数等于
其各因子之和*/
{
int x;
int x_j; //寄存x的值
int n;
int sum = 0;
int y;
int i = 0; //完数的个数
printf("请依次输入x,n的值(用空格隔开),我会为你输出x~n的完数。\n");
scanf("%d%d", &x, &n);
x_j = x;
if(x > n)
{
printf("输入错误,x应小于n。请重新输入。\n");
scanf("%d %d", &x, &n);
x_j = x;
}
for(; x <= n; x++) //完数从2开始。
{
sum = 0;
for(y = 1; y <= x/2; y++) // ——————y<=x/2
{
if(x % y == 0)
{
sum = sum + y ;
}
else
continue;
}
if(sum == x)
{
printf("%d\n 是完数。\n", x);
i++;
}
else
continue;
}
printf("\n经统计,%d~%d一共有 %d 个完数。\n", x_j, n, i);
getchar();
return 0;
}
#include<stdio.h>
#include<math.h>
int main(void) /*求完数。完数:如28 = 1 + 2 + 4 + 7 + 14,完数等于
其各因子之和*/
{
int x;
int x_j; //寄存x的值
int n;
int sum = 0;
int y;
int i = 0; //完数的个数
printf("请依次输入x,n的值(用空格隔开),我会为你输出x~n的完数。\n");
scanf("%d %d", &x, &n);
x_j = x;
while(x > n || x <0 || n<0)//循环输入
{
printf("输入错误,x应小于n。请重新输入。\n");
scanf("%d %d", &x, &n);
//x_j = x;
}
for(; x <= n; x++)
{
sum = 0;//每计算一个数要清零
for(y = 1; y < x; y++)//此处上限应该是x
{
if(x % y == 0)
{
sum = sum + y;//累加每个因子
}
}
if(sum == x)
{
printf("%d\n 是完数。\n", x);
i++;
}
else
continue;
}
printf("\n经统计,%d~%d一共有 %d 个完数。\n", x_j, n, i);
getchar();
getchar();
return 0;
}
求1000以内的完数的C语言代码如下:
#include <stdio.h>
int main()
{
int n=1000;
int r,j,i;
for(i=1;i<n; i++){
r = 0;
for(j=1;j<i;j++){
if(i%j == 0){
r = r + j;
}
}
if(r == i){
printf("the result is:%d\n",r);
}
}
return 0;
}
输出结果为:
6,28,496,
即1000以内的完数只有6、28、496三个数字。