c语言问题:要求对于输入的任意一个正整数,验证它是不是是完数。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言问题:要求对于输入的任意一个正整数,验证它是不是是完数。相关的知识,希望对你有一定的参考价值。

一个数如果恰好等于它的因子之和,这个数就称为完数。例如6的因子有1,2,3由于6=1+2+3,所以6是完数。

#include<stdio.h>
#include<math.h>
int main()

    int nSum = 0, nNum = 0;
    scanf("%d", &nNum);
    if (nNum < 6)   // 第一个完数是6
    
        return 0;
    
    for (int j = 1; j < sqrt(nNum); ++j)
    
        if (nNum % j == 0)// nNum对j取余等于0,则j是nNum的真因子
        
            nSum += j;
        
    
    if (nNum == nSum)   // n所有的真因子的和恰好等于它本身
    
        printf("%d是完数\\n", nNum);
        return 0;
    
    printf("%d不是完数\\n", nNum);
    return 0;

参考技术A #include<iostream.h>
int sum(int a)

int i,sum=0;
for(i=1;i<=a/2;i++)

if(a%i==0)

sum+=i;


return sum;


void main()

int a;
cout<<"请输入一个正整数:";
cin>>a;
int s=sum(a);
if(s==a)

cout<<a<<"是完数"<<endl;
else

cout<<a<<"不是完数"<<endl;

本回答被提问者采纳
参考技术B 程序源代码:
main()

static int k[10];
int i,j,n,s;
for(j=2;j<1000;j++)

n=-1;
s=j;
for(i=1;i
if((j%i)==0)
n++;
s=s-i;
k[n]=i;


if(s==0)

printf("%d is a wanshu",j);
for(i=0;i printf("%d,",k[i]);
printf("%d\n",k[n]);


C语言如何从键盘输入任意3个数,按从小到大的顺序输出?

代码1.

// 输入3个数,要求按从小到大顺序输出  
  
#include <stdio.h>  
  
int main()  
  
    int a,b,c,t;  
    printf("请输入三个数:");  
    scanf("%d%d%d",&a,&b,&c);  
    if(a > b)  
      
        t = a;  
        a = b;  
        b = t;  
      
    if(a > c)  
      
        t = a;  
        a = c;  
        c = t;  
      
    if(b > c)  
      
        t = b;  
        b = c;  
        c = t;  
      
    printf("从小到大的顺序是:%d  %d  %d\\n",a,b,c);  
    return 0;  

代码2.

输入3个字符串,按从小到大顺序输出。  //先用程序对三个数进行从小到大排序,然后修改程序
#include<stdio.h>
#include<string.h>
int main()
void swap(char *pt1,char *pt2);
 char a[20],b[20],c[20];
 char *p1,*p2,*p3;
 printf("请输入三个字符串:");
 gets(a);
 gets(b);
 gets(c);
 //或用scanf("%s,%s,%s",a,b,c);
 p1=&a[0];p2=&b[0];p3=&c[0];//三个指针分别指向三个字符数组
 if(strcmp(*p1,*p2)>0)swap(p1,p2);//if(strcmp(a,b)>0)swap(a,b); //比较两个字符串的大小,为什么用前一句的时候会出现警告呢
 
 if(strcmp(a,c)>0)swap(a,c);//if(strcmp(*p1,*p3)>0)swap(*p1,*p3);
 if(strcmp(b,c)>0)swap(b,c);// if(strcmp(*p2,*p3)>0)swap(*p2,*p3);
 printf("由小到大排列:%s\\n%s\\n%s\\n",a,b,c);
 return 0;


void swap(char *pt1,char *pt2)
 char t[20];
   strcpy(t,pt1);
   strcpy(pt1,pt2);
   strcpy(pt2,t);
//t=*pt1;*pt1=*pt2;*pt2=t;

代码3.

#include<stdio.h> 
#include<string.h> 
#define SIZE 3 
#define LEN 50 


int main(void) 
 
    char str[SIZE][LEN]; 
    char (*pst)[LEN]=str; 
    char temp[LEN]; 
    int i,j; 
    
    printf("Please enter 3 string.\\n"); 
    
    for(i=0;i<SIZE;i++) 
     
        fgets(*(pst+i),LEN,stdin);
     
    printf("Befor sort:\\n"); 
    
    for(i=0;i<SIZE;i++)
      
         fputs(*(pst+i),stdout);
     
      
     for(i=0;i<SIZE-1;i++)
          for(j=i+1;j<SIZE;j++) 
           
          
              if(strcmp(*(pst+i),*(pst+j)) == 1)
               
                  strcpy(temp,*(pst+i));
                  strcpy(*(pst+i),*(pst+j));
                  strcpy(*(pst+j),temp);
                
            
            
       printf("After sort:\\n"); 
       for(i=0;i<SIZE;i++) 
        
           fputs(*(pst+i),stdout);
       
       

参考技术A 代码1.
// 输入3个数,要求按从小到大顺序输出

#include <stdio.h>

int main()

int a,b,c,t;
printf("请输入三个数:");
scanf("%d%d%d",&a,&b,&c);
if(a > b)

t = a;
a = b;
b = t;

if(a > c)

t = a;
a = c;
c = t;

if(b > c)

t = b;
b = c;
c = t;

printf("从小到大的顺序是:%d %d %d\n",a,b,c);
return 0;

代码2.
输入3个字符串,按从小到大顺序输出。 //先用程序对三个数进行从小到大排序,然后修改程序
#include<stdio.h>
#include<string.h>
int main()
void swap(char *pt1,char *pt2);
char a[20],b[20],c[20];
char *p1,*p2,*p3;
printf("请输入三个字符串:");
gets(a);
gets(b);
gets(c);
//或用scanf("%s,%s,%s",a,b,c);
p1=&a[0];p2=&b[0];p3=&c[0];//三个指针分别指向三个字符数组
if(strcmp(*p1,*p2)>0)swap(p1,p2);//if(strcmp(a,b)>0)swap(a,b); //比较两个字符串的大小,为什么用前一句的时候会出现警告呢

if(strcmp(a,c)>0)swap(a,c);//if(strcmp(*p1,*p3)>0)swap(*p1,*p3);
if(strcmp(b,c)>0)swap(b,c);// if(strcmp(*p2,*p3)>0)swap(*p2,*p3);
printf("由小到大排列:%s\n%s\n%s\n",a,b,c);
return 0;

void swap(char *pt1,char *pt2)
char t[20];
strcpy(t,pt1);
strcpy(pt1,pt2);
strcpy(pt2,t);
//t=*pt1;*pt1=*pt2;*pt2=t;

代码3.
#include<stdio.h>
#include<string.h>
#define SIZE 3
#define LEN 50
int main(void)

char str[SIZE][LEN];
char (*pst)[LEN]=str;
char temp[LEN];
int i,j;

printf("Please enter 3 string.\n");

for(i=0;i<SIZE;i++)

fgets(*(pst+i),LEN,stdin);

printf("Befor sort:\n");

for(i=0;i<SIZE;i++)

fputs(*(pst+i),stdout);


for(i=0;i<SIZE-1;i++)
for(j=i+1;j<SIZE;j++)


if(strcmp(*(pst+i),*(pst+j)) == 1)

strcpy(temp,*(pst+i));
strcpy(*(pst+i),*(pst+j));
strcpy(*(pst+j),temp);



printf("After sort:\n");
for(i=0;i<SIZE;i++)

fputs(*(pst+i),stdout);

以上是关于c语言问题:要求对于输入的任意一个正整数,验证它是不是是完数。的主要内容,如果未能解决你的问题,请参考以下文章

角谷猜想,C语言,输出过程

2.给一个不多于5位的正整数,要求: ①求出它是几位数; ②分别输出每一位数字 ③按逆序输出各位数字。

编程将任意一个4位正整数逆序输出,要求不输出前导0

c语言,任意输入一个五位正整数,逆序输出每一位上的数

C语言任意输入一个有五位数字的正整数,逆序输出每一数位上的数字 如输入12345 输出5 4 3 2 1

关于c语言超长正整数相加的问题,。求高手指教!!!!!