C语言中各种数的多种求法
文章目录
1.三个数从小到大排序
思想:实用三个if进行数的大小判断和交换
参考代码:
//三个数从小到大排序
int main()
{
//三个数从小到大排序
int num1 = 0;
int num2 = 0;
int num3 = 0;
printf("请输入三个待排序的数字:");
scanf("%d %d %d", &num1, &num2, &num3);
printf("排序前:num1=%d num2=%d num3=%d\n", num1, num2, num3);
if (num1 < num2)
{
int ret = num1;//ret用于临时存储数
num1 = num2;
num2 = ret;
}
if (num1 < num3)
{
int ret = num1;
num1 = num3;
num3 = ret;
}
if (num2 < num3)
{
int ret = num2;
num2 = num3;
num3 = ret;
}
printf("排序后:num1=%d num2=%d num3=%d\n", num1,num2,num3);
return 0;
}
2.奇偶数
思想:
- 方法一:奇数:不能被2整除的数 —> num % 2 !=0 偶数:能被2整除的数 —> num % 2 ==0
- 方法二:三目运算符 —> num % 2 ? printf(“奇数”) : printf(“偶数”);
- 方法三:按位与 —> num & 1 条件为真则为奇数,条件为假则为偶数 思想:奇数一定有奇数个位为1,则&1值不可能为0
2.1 方法一:概念判断
//方法一:奇数:不能被2整除的数 ---> num % 2 !=0 偶数:能被2整除的数 ---> num % 2 ==0
int main()
{
//方法一:概念判断
int num = 0;
printf("请输入一个数用于判读奇偶:");
scanf("%d", &num);
if (num % 2 != 0)
{
printf("这个数是奇数!\n");
}
else
{
printf("这个数是偶数!\n");
}
return 0;
}
2.2 方法二:三目运算符
//方法二:三目运算符 ---> num % 2 ? printf("奇数") : printf("偶数");
int main()
{
int num = 0;
printf("请输入一个数用于判读奇偶:");
scanf("%d", &num);
//方法二:三目运算符
return num % 2 ? printf("这个数是奇数!\n") : printf("这个数是偶数!\n");
}
2.3 方法三:按位与
//方法三:按位与 ---> num & 1 条件为真则为奇数,条件为假则为偶数 思想:奇数一定有奇数个位为1,则&1值不可能为0
int main()
{
int num = 0;
printf("请输入一个数用于判读奇偶:");
scanf("%d", &num);
//方法三:按位&
if (num & 1)
{
printf("这个数是奇数!\n");
}
else
{
printf("这个数是偶数!\n");
}
return 0;
}
3.素数合数(效率越往下越高,最多差16倍)
知识补充:
- 正因数:也称为正约数,指的是一个整数中大于0的因素。如24的正因数有1 2 3 4 6 8 12 24
- 公因数:也称为公约数,指的是能同时整除几个整数的数。如24和16的公约数有1 2 4 8,以及它们的最大公约数是8
- 素数:除了1和它本身两个正因数以外没有其他因素
- 合数:比1大且不是素数的数就是合数
- 注意:0和1既不是素数也不是合数
思想:
- 方法一:暴力遍历
- 方法二:用奇数规则
- 方法三:用奇偶规则
- 方法四:巧用数组
- 方法五:巧用平方根
3.1 方法一:暴力遍历
//方法一:暴力遍历
#include <stdio.h>
int main()
{
unsigned int count = 0;//统计运算的次数
for (int x = 2; x < 1000; x++)//在2到1000之间找质数
{
int i = 0;
for (i = 2; i < x; i++)//试除法,能不能被x整除,能整除就不是质数,从2开始找,直到等于x
{
count++;
if (x % i == 0)//找到能被x整除的数了,即它是合数
{
break;
}
}
if (x == i)//找到和x相等也没有被整除的,证明是质数
{
printf("%d ", x);
}
}
printf("\n\n");
printf("运算的次数:%d ", count);
return 0;
}
3.2 方法二:用奇数规则
- 第一种方法是否有点复杂呢,这是当然的
- 其实我们从质数:2、3、5、7、9、11、13、17、19······中发现什么规律了没有呢?
- 嘿嘿嘿,那就是除了2以外那些2的倍数(4、6、8、10、12、14、18·······)都不是质数
- 所以我们的第一层for循环是不是可以不用一步步自增1,而是从3开始自增2呢,从而产生3、5、7、9、11······这样就把偶数给巧妙避免了
//方法二:用奇数规则
//求1-1000的质数
#include<stdio.h>
int main()
{
int i = 0;
unsigned int count = 0;
printf("%d