一:求最小公倍数和最大公约数
方法1
#include <stdio.h>
int main()
{
int a,b,c,m,n;
printf("please input two number\n");
scanf("%d%d",&a,&b);
m=a; n=b;
while (b!=0)
{
c=a%b;
a=b;b=c;
}
printf("the common divisor is %d\n",a);
printf(" the common multiple is %d\n",m*n/a);//固定算法求最小公倍数
}
方法:a=15;b=12 c=3
15%12=3
a=12 b=3
12%3=0;
c=0所以b等于0,a为最大公约数
方法2:
#include <stdio.h>
int main()
{
int num1,num2,min,max,i;
scanf("%d%d",&num1,&num2);
min=(num1 >num2) ? num2 : num1;
for(i=min;i>0;i--)
{
if(num1 % i ==0 && num2 % i ==0)
{
printf("divisor is %d\n",i);
break;
}
}
max=(num1 > num2) ? num1:num2;
for(i=max ; i<=num1 * num2; i++)
{
if(i %num1 ==0 && i % num2 ==0)
{
printf("multiple is %d\n",i);
break;
}
}
}
解释:取2个数最小的,i=min,i--从大到小依次与2个数取余,若符合2个余数为0则这个数为最大公数;
取 2个数最大的,i=max,因为2个数最大公倍数为2个数积,而且最小公倍数一定大于等于max,所以以max为基础依次加 1,直到i可以同时被2个数取余输出最小公倍数。
二:
题目:找出100到300之间不能被3整除的数,5个一排输出
#include <stdio.h>
int main()
{
int i,count=0;
for(i=200;i<=300;i++)
{
if((i%3) != 0)
{
count++;
printf("%d ",i);
}
if(count == 5)
{
printf("\n");
count=0;
}
注意给count写初值:局部变量没有初值会被赋予随机值。全局变量会等于0;
}
}
三:题目:输入一个整数a,再输入两个整数p(p<32),v(0|1),将该整数a的p位设置为v,输出修改后的该整数的二进制表示.
#include <stdio.h>
int main()
{
int num,p,v,i;
printf("please input\n");
scanf("%d%d%d",&num,&p,&v);
if(p>=32 || v>1||v<0 )//判定反条件
{
printf("input error\n");
return -1;//return会结束本次程序
}
if(v==1)
{
num=num |(1<<(p-1));//因为是第几位所以减一
}
else if(v==0)
{
num= num & ~(1<< (p-1));1与0=0,移位1取反
}
for(i=0;i<32;i++)
{
printf("%d",(num & 0x80000000)>>31);//int类型32位1000 0000 0000 。。。与将最高位移位31位到最低位输出
num= num << 1;输出次高位
}
printf("\n");
return 0;
}