1、假设变量x和n是两个正整数,我们知道x/n这个表达式的结果是取Floor(取下限),
例如x是17,n是4,则结果是4。如果希望结果取Ceiling(取上限)应该怎么写表达式呢?
例如x是17,n是4,则结果是5,而x是16,n是4,则结果是4。
#include <stdio.h>
int ceiling(int a, int b)
{
int tmp = 0;
tmp = a / b;
if (a % b > 0)
{
tmp += 1;
}
return tmp;
}
int flooring(int a, int b)
{
return (int)(a / b);
}
int main(int argc, char *argv[])
{
printf("%d\n", ceiling(7, 3));
printf("%d\n", flooring(7, 3));
return 0;
}
2、递归求解n的阶乘。
#include <stdio.h>
unsigned int factorial(unsigned int n)
{
if (0 == n)
{
return 1;
}
return n * factorial(n - 1);
}
int main(int argc, char *argv[])
{
printf("0! = %u\n", factorial(0));
printf("3! = %u\n", factorial(3));
printf("5! = %u\n", factorial(5));
printf("6! = %u\n", factorial(6));
return 0;
}
3、编写递归函数求两个正整数a和b的最大公约数(GCD,Greatest Common Divisor),
使用Euclid算法:
1. 如果a除以b能整除,则最大公约数是b。
2. 否则,最大公约数等于b和a%b的最大公约数。
Euclid算法是很容易证明的,请读者自己证明一下为什么这么算就能算出最大公约数。
#include <stdio.h>
int max_common_divisor(int a, int b)
{
if (0 == a % b)
{
return b;
}
else
{
return max_common_divisor