您的位置:首页 > 其它

07.07C

2016-07-07 08:35 363 查看
【项目1-完数】
一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3,再如8的因子和是7(即1+2+4),8不是完数。
(1)输入一个数n,判断n是否是完数
(2)输出1000以内的所有完数
(3)亲密数:如果整数A的全部因子(包括1,不包括A本身)之和等于B;且整数B的全部因子(包括1,不包括B本身)之和等于A,则将整数A和B称为亲密数。求3000以内的全部亲密数。(提示:按照亲密数定义,要判断数a是否有亲密数,只要计算出a的全部因子的累加和为b,再计算b的全部因子的累加和为n,若n等于a则可判定a和b是亲密数。)

解法:

#include <stdio.h>

#include <stdlib.h>

int main()

{

    int iXin;//输入的数字

    int i;

    int sum;

    int m;

    printf("please input a number:");

    scanf("%d",&iXin);//读入输入数字

    for(m=2;m<=iXin;++m)

    {

    for(i=1;i<m;++i)

    {

        if (m%i==0)

            sum=sum+i;

    }

        if(sum==m)

    printf("%d ",m);

    sum=0;

    }

    return 0;

}

【项目2 - n=a!+b!+c!】
求满足条件n=a!+b!+c!的所有三位数n并输出,其中a,b,c分别为n的百、十、个位数。

解法:

#include <stdio.h>

#include <stdlib.h>

int main()

{

    int n,m;

    int a,b,c;//个位数,十位数,百位数

    int iMulti_a,iMulti_b,iMulti_c;

    int sum;

    int i,j,k;

    printf("please enter a number less than 1000:");

    scanf("%d",&n);

    for (m=144;m<=n;++m)

    {

    a=m%10;

    b=(m/10)%10;

    c=m/100;

     iMulti_a=1;

     iMulti_b=1;

     iMulti_c=1;

         sum=0;

         if(a!=0)

         {

     for(i=1;i<=a;++i)

     {

         iMulti_a = iMulti_a*i;

     }

         }

         else iMulti_a=0;

     sum+=iMulti_a;

     if(b!=0)

     {

      for(j=1;j<=b;++j)

     {

         iMulti_b =iMulti_b*j;

     }

     }

     else iMulti_b=0;

      sum+=iMulti_b;

      if(c!=0)

      {

      for(k=1;k<=c;++k)

     {

         iMulti_c =iMulti_c * k;

     }

      }

      else iMulti_c=0;

      sum+=iMulti_c;

     if(sum==m)

    printf("%d",m);

    }

    return 0;

}

【项目3-反序数】
(1)输入一个正整数,输出它的反序数(反序数,即将其所有位的数字反过来。例如,123是321的反序数)
(2)求1000000以内的正整数n,要求9n是n的反序数。

解法:

#include <stdio.h>

#include <stdlib.h>

int main()

{

    int n;//输入整数

    int m;

    int k;

for(n=1;n<=1000000;++n)

{

        k=n;

        m=0;

    while(k>0)

    {

        m=10*m+k%10;

        k=k/10;

    }

    if(m==9*n)

        printf("%d ",n);

}

printf("\n");

    return 0;

}

【项目4-回文数】
(1)输入一个正整数,判断其是否为一个回文数(例1221、12321都是回文数,正着看、倒着看,是同一个数)。
(2)输出10000以内的所有回文数。

#include <stdio.h>

#include <stdlib.h>

int main()

{

    int n,m;

    int iReverse_n;

    int k;

    printf("please enter a number n:");

    scanf("%d",&n);

    for (m=1;m<=n;++m)

    {

        k=m;

        iReverse_n=0;

        while(k>0)

        {

            iReverse_n=10*iReverse_n+k%10;

            k=k/10;

        }

        if(iReverse_n==m)

            printf("%d ",m);

    }

    return 0;

}

//任意输入数字以内所有的回文数

【项目5-阿姆斯特朗数】
如果一个正整数等于其各个数字的立方和,则称该数为阿姆斯特朗数(亦称为自恋性数)。如 407=43+03+73就是一个阿姆斯特朗数。试编程求1000以内的所有阿姆斯特朗数。

解法:

#include <stdio.h>

#include <stdlib.h>

int main()

{

    int n,m;

    int iA_n;

    int a;

    int k;

    printf("please enter a number:");

    scanf("%d",&n);

    for(m=1;m<=n;++m)

    {

        iA_n=0;

        a=0;

        k=m;

        while(k>0)

        {

            a=k%10;

            iA_n=iA_n+(a*a*a);

            k=k/10;

        }

        if(iA_n==m)

            printf("%d ",m);

    }

    return 0;

}

【项目6-回文日】
很有趣的一个题目:2011年11月02日是一个回文日:2011 1102,在2011级同学做这道题时我们刚刚度过这一天!请列出本世纪还有多少个回文日(假如我们能活到百岁,你和我的……)。注意:一年只有12个月。

解法:

#include <stdio.h>

#include <stdlib.h>

int main()

{

    int iData;//输入日期的上限

    int iYear,iMonth,iDay;//分离日期的年 月 日

    int iData_n;//迭代日期

    int iReverse_data;//回文日期

    int a;//时间表达式

    int k;//分离日期的各位数

    printf("please enter a upper limit of the data:");

    scanf("%d",&iData);

    for (iData_n=20111301;iData_n<=iData;++iData_n)

    {

        iYear=iData_n/10000;

        iMonth=iData_n/100%100;

        iDay=iData_n%100;

        iReverse_data=0;

        k=iData_n;

        if(iMonth>0&& iMonth<=12)

        {

        if(iMonth==1||iMonth==3||iMonth==5||iMonth==7||iMonth==8||iMonth==10||iMonth==12)

            a=1;

        else if(iMonth==4||iMonth==6||iMonth==9||iMonth==11)

            a=2;

        else if(iMonth==2)

            a=3;

        }

        else continue;

        switch(a)

        {

    case 1:

        {

           if(iDay>0&&iDay<=31)

           {

               while(k>0)

               {

                   iReverse_data=10*iReverse_data+k%10;

                   k=k/10;

               }

           }

           if(iReverse_data==iData)

            printf("%d" ,iData);

        }

    case 2:

        {

          if(iDay>0&&iDay<=30)

           {

               while(k>0)

               {

                   iReverse_data=10*iReverse_data+k%10;

                   k=k/10;

               }

           }

           if(iReverse_data==iData)

            printf("%d" ,iData_n);

        }

    case 3:

        {

        if(iYear%4==0 && iYear%400==0)

        {

          if(iDay>0&&iDay<=29)

           {

                while(k>0)

               {

                   iReverse_data=10*iReverse_data+k%10;

                   k=k/10;

               }

           }

           if(iReverse_data==iData)

            printf("%d" ,iData);

        }

        else

        {

           if(iDay>0&&iDay<=28)

           {

                while(k>0)

               {

                   iReverse_data=10*iReverse_data+k%10;

                   k=k/10;

               }

           }

           if(iReverse_data==iData_n)

            printf("%d ",iData_n);

        }

    }

        }

 }

     return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: