C语言(经典题)学习记录第九天

分数数列:2/1,3/2,5/3,8/5,...,21/13...求出这个数列的前20项和

        这题要先找规律,每一个的分母都 = 前一项的分子,每一个分子都是前一项的分子 + 分母,然后再算出每一项的值,再将得到的值相加,这串代码用到了两个存储变量,一个是存储每一项的值并且将这些值全部相加 (sum) ,另一个是存放上一项的分子 ( t ),因为这里是分数,使所以可以判断这个数列的最终值应该是有小数的,所以这里用到 float 类型

int main()
{
	int i = 0;
	float sum = 0;
	float a = 2;
	float b = 1;
	float t = 0;
	for (i = 0; i <= 20; i++)
	{
		sum += a / b;
		t = a;
		a = a + b;
		b = t;
	}
	printf("%.2f", sum);
	return 0;
}

 求1!+2!+3!+...+20!

        这题我用到了一个递归的方式进行计算,递归就是函数自己调用自己,但是每调用一次自己就要更接近结束的值才行,也就是使用递归的时候必须要有一个结束条件,并且每一次调用都要接近这个结束条件,不然就会出现栈溢出的现象,这个数值太大所以用到一个 long double 类型。

long double Str(int m)
{
	long double ret = 0;
	if (m > 0)
	{
		ret = m * Str(m - 1);
	}
	else
	{
		ret = 1;
	}
	return ret;
}
int main()
{
	int i = 0;
	long double sum = 0;
	for (i = 20; i >= 0; i--)
	{
		sum += Str(i);
	}
	printf("%.1lf", sum);
	return 0;
}

判断一个五位数是不是回文数,如:12321,个位与万位相同,十位与千位相同

        将个位、十位、千位、万位的值取出,然后将他们按条件进行对比,用这个方法来判断这个数是否为回文数。

int main()
{
	int a = 0;//个位
	int b = 0;//十位
	int c = 0;//千位
	int d = 0;//万位
	int i = 0;
	scanf("%d", &i);
	a = i % 10;
	b = i / 10 % 10;
	c = i / 1000 % 10;
	d = i / 10000 % 10;
	if (a == d && b == c)
	{
		printf("该数是回文数\n");
	}
	else
	{
		printf("该数不是回文数\n");
	}
	return 0;
}

  • 24
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值