分数数列: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;
}