<span style="color: rgb(85, 85, 85); font-family: 'microsoft yahei'; font-size: 15px; line-height: 35px;">【项目1-完数】</span><pre name="code" class="cpp">/*
* Copyright (c) 2016, CSDN学院
* All rights reserved.
* 文件名称:【项目2 - n=a!+b!+c!】.cpp
* 作 者:张易安
* 完成日期:2016年 8 月 29 日
* 版 本 号:v1.0
*
* 问题描述:求满足条件n=a!+b!+c!的所有三位数n并输出,其中a,b,c分别为n的百、十、个位数。
*/
#include<stdio.h>
int main()
{
int n,a,b,c,m,D,i;
for(n=100;n<1000;++n)
{
a=n/100;
b=(n/10)%10;
c=n%10;
D=0;
for(m=1,i=1;m<=a;++m)
i*=m;D+=i;
for(m=1,i=1;m<=b;++m)
i*=m;D+=i;
for(m=1,i=1;m<=c;++m)
i*=m;D+=i;
if(n==D)
printf("%d",n);
}
return 0;
}
运行结果
【项目2 - n=a!+b!+c!】
/*
* Copyright (c) 2016, CSDN学院
* All rights reserved.
* 文件名称:【项目2 - n=a!+b!+c!】.cpp
* 作 者:张易安
* 完成日期:2016年 8 月 29 日
* 版 本 号:v1.0
*
* 问题描述:求满足条件n=a!+b!+c!的所有三位数n并输出,其中a,b,c分别为n的百、十、个位数。
*/
#include<stdio.h>
int main()
{
int n,a,b,c,m,D,i;
for(n=100;n<1000;++n)
{
a=n/100;
b=(n/10)%10;
c=n%10;
D=0;
for(m=1,i=1;m<=a;++m)
i*=m;D+=i;
for(m=1,i=1;m<=b;++m)
i*=m;D+=i;
for(m=1,i=1;m<=c;++m)
i*=m;D+=i;
if(n==D)
printf("%d",n);
}
return 0;
}
运行结果
心得体会
核心算法就是求n!,利用for循环,设两个变量
【项目3-反序数】
/*
* Copyright (c) 2016, CSDN学院
* All rights reserved.
* 文件名称:【项目3-反序数】.cpp
* 作 者:张易安
* 完成日期:2016年 8 月 29 日
* 版 本 号:v1.0
*
* 问题描述:<span style="color: rgb(85, 85, 85); font-family: 'microsoft yahei'; font-size: 15px; line-height: 35px;">(2)求1000000以内的正整数n,要求9n是n的反序数。</span>
*/
#include<stdio.h>
int main()
{
int i;
for(i=1;i<=1000000;++i)
{
int n=0,a;
a=i;
while(a>0)
{
n=n*10+a%10;
a=a/10;
}
if(n==9*i)
printf("%d\n",i);
}
}
运行结果
【项目3-反序数】
/*
* Copyright (c) 2016, CSDN学院
* All rights reserved.
* 文件名称:【项目3-反序数】.cpp
* 作 者:张易安
* 完成日期:2016年 8 月 29 日
* 版 本 号:v1.0
*
* 问题描述:(1)输入一个正整数,输出它的反序数(反序数,即将其所有位的数字反过来。例如,123是321的反序数)
*/
#include<stdio.h>
int main()
{
int a,b,n;
scanf("%d",&n);
a=n;
b=0;
while(a>0)
{
b=b*10+a%10;//%10相当于取n的个数
a=a/10;//相当于筛选掉个位数
}
printf("%d的反序数为%d\n",n,b);
return 0;
}
运行结果
心得体会
核心的就是数的调换顺序
【项目4-回文数】
/*
* Copyright (c) 2016, CSDN学院
* All rights reserved.
* 文件名称:【项目4-回文数】.cpp
* 作 者:张易安
* 完成日期:2016年 8 月 29 日
* 版 本 号:v1.0
*
* 问题描述:(1)输入一个正整数,判断其是否为一个回文数(例1221、12321都是回文数,正着看、倒着看,是同一个数)。
*/
#include<stdio.h>
int main()
{
int a,n,sum;
scanf("%d",&n);
a=n;
sum=0;
while(a>0)
{
sum=sum*10+a%10;
a=a/10;
}
if(sum==n)
printf("Yes!!!\n");
else
printf("No!!!\n");
return 0;
}
运行结果
【项目4-回文数】
/*
* Copyright (c) 2016, CSDN学院
* All rights reserved.
* 文件名称:【项目4-回文数】.cpp
* 作 者:张易安
* 完成日期:2016年 8 月 29 日
* 版 本 号:v1.0
*
* 问题描述:(2)输出10000以内的所有回文数。
*/
#include<stdio.h>
int main()
{
int a,sum,i;
for(i=1;i<=10000;++i)
{
a=i;
sum=0;
while(a>0)
{
sum=sum*10+a%10;
a=a/10;
}
if(sum==i)
printf("%d\n",i);
}
return 0;
}
运行结果
【项目5-阿姆斯特朗数】
/*
* Copyright (c) 2016, CSDN学院
* All rights reserved.
* 文件名称:【项目5-阿姆斯特朗数】.cpp
* 作 者:张易安
* 完成日期:2016年 8 月 29 日
* 版 本 号:v1.0
*
* 问题描述:如果一个正整数等于其各个数字的立方和,则称该数为阿姆斯特朗数(亦称为自恋性数)。
* 如 407=43+03+73就是一个阿姆斯特朗数。试编程求1000以内的所有阿姆斯特朗数。
*/
#include<stdio.h>
int main()
{
int a,sum,i,b;
for(i=1;i<=1000;++i)
{
sum=0;
a=i;
while(a>0)
{
b=a%10;
sum+=b*b*b;
a=a/10;
}
if(sum==i)
printf("%d\n",sum);
}
}
运行结果
【项目6-回文日】
。。。就不传了