目录
找两个数的最大公约数
法1
int main()
{
int m, n;
scanf("%d %d", &m, &n);
int ret = m < n ? m : n;//求得到m和n中较小的那个数
while (1)
{
if (m%ret == 0 && n%ret == 0)//从m与n的最小值中开始减,减到if成立
{
break;//当ret同时能够被m和n整除时,ret就是最大公约数
}
ret--;
}
printf("%d", ret);
return 0;
}
法2辗转相除法求最大公约数
int main()
{
int m, n;
scanf("%d %d", &m, &n);//假设输入24 18,ret=24%18=6,将n的值赋给m,m=18,ret的值赋给n,ret=6,18%6=0;while就停下来此时n的值就是最大公约数,若输入的是18,24,18/%24=18,也会把两者进行交换
int ret = 0;
while (ret = m % n)//ret为0就停下来了,
{
m = n;
n = ret;
}
printf("%d", n);
return 0;
}
最小公倍数
可以把两个数相乘除以他们的最大公约数
判断一个数是否是素数
int main()
{
int flag = 1;
int num,i;
scanf("%d", &num);
for (i = 2; i < num; i++)//从2到num-1对num进行试除,一旦除成功就跳出去
{
if (num%i == 0)
{
flag = 0;
break;
}
}
if (flag)
{
printf("是素数");
}
else
printf("不是素数");
return 0;
}
但我们还有更高效率的方法
要找一个数的因数如16=2*8,4*4,如果有因数,则在根号16前面至少会有一个因数,所以不用全部进行试除
#include<math.h>
int main()
{
int i;
int flag = 1;
int num = 13;
for (i = 2; i <= sqrt(num); i++)
{
if (num%i == 0)
{
flag = 0;
break;
}
}
if (flag)
{
printf("是素数");
}
return 0;
}
模拟实现用户输入密码登入界面
用户只有3次输入密码的机会,三次都错误就退出界面
int main()
{
int i = 0;
char password[20] = "";
假设密码是123456
for (i = 0; i < 3; i++)
{
printf("请输入密码\n");
scanf("%s", password);
对字符串进行判断相等,用strcmp
if (strcmp(password, "123456") == 0)
{
printf("登录成功\n");
}
}
if (i == 3)//i最后自增到3<3不成立就不执行了,往下i=3,3次都失败了
{
printf(" 登录失败,退出程序\n");
}
return 0;
}