1求完数。2求逆。

一:求1—1000之间的完数;

     1:了解完数,(因子之和等于数本身)

        使用循环结构,得出可以被这个数之前的数都可以除干净的数,

      切将其因子求和,后返回。

     2:返回子函数,与本数比较是否相等。

  //求完数
#include<stdio.h>
int factorsum(int number);
int main()
{
 int i,m,n,number;
 printf("Eentern m n(m>=1,n<=1000):");
 scanf("%d%d",&m,&n);
 printf("完数为:");
 for(i=m;i<=n;i++)                    //对n m之间的数一一带入子函数
  if(factorsum(i)==i)
   printf("%d\t",i);
  
 
  printf("\n");

return 0;
}
       //求因子之和子函数
int factorsum(int number)
{
 int q,sum,x;
 sum=0;
 for(q=1;q<number;q++){      //循环求因子和
  x=number%q;
  if(x==0)
   sum=sum+q;}
  return sum;
}
 
 
 
 
二:求一组数的逆数
      1:开始解决时对逆序数的个数判断有说模糊。
           在翻阅完书本后,可以用do while语句
         设置结束点,比如给了一组数,number=number/10
         这样子就可以在这组数循环时出现number=0的状态
         样就可以用while语句结束。
      2:在累加余数时,发现用原数*10后就解决了将余数排序输出。
       
 
# include <stdio.h>
int reserch(int number);
int main(void)
{
 int n,p;
 printf("Entern a number:");
 scanf("%d",&n);
 p=reserch(n);     //调用子函数
 printf("%d\n",p);
return 0;
}
  /*写逆子函数*/
int reserch (int number)
{
 int q,x;
 if(number>0)
 
  x=1;
    else
  x=-1;
 
 q=0;
 do{
  q=q*10+number%10;      //求逆序数
  number=number/10;
 }
 while
  (number!=0);           //循环终止条件
 return q*x;
}
 
 
 
发现在一些细节方面,总是模棱两可,如调用函数的函数名转换,
返回值的直接调用。number在函数表头中就是开了空间,但它的数字
可以任意赋值。
           
     
 
 

   

猜你喜欢

转载自www.cnblogs.com/28183311141-/p/ju9j9j9.html