1.输入两个整数,求出最大公约数。
#include<stdio.h>
int i,res,a,b;
void swap(int *m,int *n)
{
int temp;
temp=*m;
*m=*n;
*n=temp;
}
void main()
{
while(scanf("%d%d",&a,&b)!=EOF)
{
res=1;
if(a>b)
swap(&a,&b);
for(i=2;i<=a;i++)
if(a%i==0&&b%i==0)
j=i;
printf("最大公约数为:%d\n",j);
}
}
纯暴力法,毫无技术含量。
#include<stdio.h>
int t,a,b;
void swap(int *m,int *n)
{
int temp=*n;
*n=*m;
*m=temp;
}
void main()
{
while(scanf("%d%d",&a,&b)!=EOF)
{
if(a<b)
swap(&a,&b);
t=b;
while(t)
{
t=a%b;
a=b;
b=t;
}
printf("%d\n",a);
}
}
这个用到的是辗转相除法,以前信安数基里学过。。
#include<stdio.h>
int m,n;
void swap(int *k,int *t)
{
int temp=*k;
*k=*t;
*t=temp;
}
int gcd(int a,int b)
{
if(b==0)
return a;
else
gcd(b,a%b);
}
void main()
{
while(scanf("%d%d",&m,&n)!=EOF)
{
if(m<n)
swap(&m,&n);
printf("%d\n",gcd(m,n));
}
}
这个是辗转相除法的递归算法。。。
2.“水仙花数”是指一个三位数,它的各位数字的立方和等于其本身,比如: 153=1^3+5^3+3^3,输入一个整数,判断它是否是水仙花数。
#include<stdio.h>
#include<math.h>
int n,i;
void main()
{
while(scanf("%d",&n)!=EOF)
{
int res=0,k=n;
for(i=0;i<3;i++)
{
res+=(int)pow(k%10,3);
k/=10;
}
if(n==res)
printf("YES\n");
else
printf("NO\n");
}
}
3.完数的定义:如果一个大于 1 的正整数的所有因子之和等于它的本身,则称这个数是完 数,比如 6,28 都是完数:6=1+2+3;28=1+2+4+7+14。输入一个整数,判断它是否是完数。
#include<stdio.h>
#include<math.h>
int i,n;
void main()
{
while(scanf("%d",&n)!=EOF)
{
int res=0;
for(i=1;i<=sqrt(n);i++)
{
if(n%i==0)
res=res+i+n/i;
}
res-=n;
if(res==n)
printf("YES\n");
else
printf("NO\n");
}
}
单纯的暴力法。这题有个bug就是没说如果是完全平方数,那因数到底是加一次还是加两次,不过好在完数里面是没有完全平方数的。