一、阶乘
求1-20的阶乘求和
循环嵌套
int main() {
long long sum=0;
for (int i = 1; i <= 20; i++)
{
long long n = 1;
for (int j = i; j > 0; j--)
{
n *= j;
}
sum += n;
}
printf("%lld", sum);
return 0;
}
递归
求n!
long int fac(unsigned int n) //定义为long int 型,避免溢出
{
long int f;
if (n == 0)
return 0; //当n=0是,递归法到尽头,依次返回函数值。
f = fac(n - 1) * n;
return (f); //返回最后一次函数值,即单次阶乘的最后结果
}
求n阶乘的和
long int fac(unsigned int n) //定义为long int 型,避免溢出
{
long int f;
if (n == 0)
return 0; //当n=0是,递归法到尽头,依次返回函数值。
f = fac(n - 1) * n;
return (f); //返回最后一次函数值,即单次阶乘的最后结果
}
int main()
{
unsigned int n;
long int s = 0;
int i;
scanf_s("%d", &n);//此处注意scanf_s与scanf的使用场景
for (i = 1; i <= n; i++)
s += fac(i); //以循环控制阶乘的和。fac函数每一次的返回值作为s的自加值
printf("%ld", s);
return 0;
}
阶乘求和等运算易产生较大数据
//阶乘求和解决溢出的办法
#include <stdio.h>
#include <math.h>
int main()
{
long long i, j, s = 0, a = 1;
for (i = 1; i < 40; i++) {
a = (a * i) % 1000000000;
s = (s + a) % 1000000000;
}
printf("%lld", s);
return 0;
}
二、每一位都是奇数
以下是一个判断奇数的递归函数,如果是则返回1.
int ifodd(int i) {
if ((i % 10 % 2 == 1) && i < 10)
return 1;
else if (i % 10 % 2 == 0)
return 0;
else if (i % 10 % 2 == 1)
ifodd(i / 10);
}
三、统计元辅音个数
#include <stdio.h>
int main()
{
char word[100];
int n = 0, m = 0, t = 0;
scanf("%s", &word);
while (word[n] != '\0')
{
switch (word[n])
{
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
m++;
break;
default:
t++;
break;
}
n++;
}
printf("%d\n%d", m, t);
return 0;
}