10c语言——素数、水仙花数、回文数、斐波拉契数、最大公约数、最小公倍数

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

1.素数

素数:除了1和本身不能被任何数整除。
算法描述:使用穷举的思想,将所有可能的解读进行列举并进行判断,符合条件的进行则被认为是素数。

//从命令行输入一个整数范围,获得该范围的素数
#include <stdio.h>
int is_prime(int n)
{
	int i=0;
	for(i = 2;i<n;++i)
	{
		if(n%i == 0)
		{
			return 0;
		}
	}
	return 1;
}
void get_prime(int begin,int end)
{
	for(begin;begin<end;++begin)
	{
		if(is_prime(begin))
		{
			printf("%d ",begin);
		}
	}
	return ;
}
int main(void)
{
	printf("input range from num1 to num2\n");

	int i,j=0;
	scanf("%d",&i);
	scanf("%d",&j);
	get_prime(i,j);
	return 0;

}

2.回文数

问题描述:回文数就是这个数顺着看和倒着看是一样的,例如:111,121,88等。
代码思想:拆数和组数的思想,
拆:每次拆对数进行求余,拿到原数的个位数;将原数进行除10,数就会向右移动一位;等数拆到最后一个数就会变成0,循环结束。
组:将拿到的个位乘以10变成十位或者百位,组成新的数。
将新数置零。

#include <stdio.h>

void pal_number(int num)
{
	int ori_num = 0;
	int tem_num = 0;
	int tem1_num = 0 ;
	int new_num = 0;//新数
	while(ori_num < num)
	{
		//将原数进行保存
		tem_num = ori_num;
		while(tem_num)
		{
			//拆数
			tem1_num = tem_num % 10;
			//右移
			tem_num /= 10;
			//组数
			new_num = new_num*10 + tem1_num;
		}
		if(new_num == ori_num) 
		{
			printf("%d ",new_num);
		}
		//置零
		new_num =0;
		++ori_num;
	}
	printf("\n");
}

int main(int argc, const char *argv[])
{
	printf("please input a num\n");
	int num =0;
	scanf("%d",&num);
	pal_number(num);

	return 0;
}

代码展示:
在这里插入图片描述

3.水仙花数

问题描述:水仙花数是一个三位数等于它的个位数^3+十位数 ^3+百位数 ^3,如果是两位数就是每个数的平方,四位数就是每个数的四次方。
代码思想;分别拿到该数 的个位数,十位数,百位数,条件判断即可。
代码展示:

#include <stdio.h>
void nar_num(int num)
{
	int n = 0;
	int i = 0;
	int j = 0;
	int k = 0;

	for(n =100 ;n < num;++n)
	{
		i = n % 10;
		j = n /10 % 10;
		k = n /100;
		if(n == i*i*i+j*j*j+k*k*k)
		{
			printf("%d ",n);
		}
	}
	printf("\n");
}
int main(int argc, const char *argv[])
{
	printf("please input a num\n");
	int num =0;
	scanf("%d",&num);
	nar_num(num);

	return 0;
}

结果展示:
在这里插入图片描述

4.斐波拉契数列

定义:波拉契数列又称为黄金分割数列,为了解决兔子繁殖问题。
斐波纳契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)
代码如下:

#include <stdio.h>
//递归版本
int Fibonacci(int n)
{
	if(n <=2)
	{
		return 1;
	}
	else
	{
		return Fibonacci(n-1) + Fibonacci(n-2);
	}
}
//普通版本
int Fibonacci(int n)
{
	if(n ==1 || n==2 )
	{
		return 1;
	}
	else
	{
		int n1 = 1;
		int n2 = 1;
		int n3 = n1+n2;
		int i=0;
		for(i=2;i<n;++i)
		{
			n3 = n1+n2;
			n1 = n2;
			n2 = n3;
		}
		return n3;
	}
}
int sum_fibo(int n)
{
	int ret,i = 0;
	int sum = 0;
	for(i=1;i<=n;i++)
	{	
		ret = Fibonacci(i);
		sum = sum+ret;
	}
	return sum;
}
int main(int argc, const char *argv[])
{
	int num = 0;
	scanf("%d",&num);
	int ret = Fibonacci(num);
	int sum = sum_fibo(num);
	printf("ret%d\n",ret);
	printf("sum%d\n",sum);
	return 0;
}

4.最大公约数

思想:从两个数种较小的数开始,一致到1,找到可以两个数对这个数进行求余
出错处理:两个数种有一个数是0,会输出输入错误。

#include <stdio.h>

int min_num(int a ,int b)
{
	if( a < b)
	{
		return a;
	}
	else
	{
		return b;
	}
}

int approx_num(int a ,int b)
{
	if(0 ==a || 0 ==b )
	{
		return 0;
	}
	int begin = min_num(a,b);
	int i = 0;
	for(i = begin ;i > 0;i--)
	{
		if(a%i == 0 && b%i==0)
		{
			return i;
		}
	}
}
int main(int argc, const char *argv[])
{
	printf("please input two num\n");
	int a,b =0;
	scanf("%d",&a);
	scanf("%d",&b);
	int ret = approx_num(a,b);
	if(ret)
	{
		printf("ret%d\n",ret);
	}
	else
	{
		printf("input error\n");
	}
	return 0;
}

运行结果:
在这里插入图片描述

5.最小公倍数

思想:从两个数中的较大数开始寻找,只要找到同时把着两个数都能整除就可以,公倍数的范围是从两个数的较大的数开始,到这两个数的乘积。
出错处理:两个数种有一个数是0,会输出输入错误。

#include <stdio.h>

int get_max(int a ,int b)
{
	if( a > b)
	{
		return a;
	}
	else
	{
		return b;
	}
}

int mul_num(int a ,int b)
{
	if(a == 0 || b == 0)
	{
		return 0;
	}
	int begin = get_max(a,b);
	int i =0 ;
	for(i= begin;i <=(a*b) ;++i)
	{
		if( i%a == 0 && i%b ==0)
		{
			return i;
		}
	}
	
}

int main(int argc, const char *argv[])
{
	printf("please input two num\n");
	int a,b=0;
	scanf("%d",&a);
	scanf("%d",&b);
	int ret = mul_num(a,b);	
	if(ret)
	{
		printf("ret = %d\n",ret);
	}
	else
	{
		printf("input error\n");
	}

	return 0;
}

运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值