请教两C语言算法:(面试时碰到的题目)

来源:百度知道 编辑:UC知道 时间:2024/06/02 12:43:54
1.用C语言编程:一个数N的阶乘(N为无穷大)
2.用C语言编一个圆心为(X,Y),半径为R的圆形

面试时碰到的题目

1.用递归法
long Factorial(long v)
{
if( v > 0 )
return (v * Factorial(v-1));
}

2.属于计算机图形学基础方面的问题,最简单的方法是用三角函数来做,计算出圆足够多的点,再把这些点用直线连接起来就可以了,代码就不给你写啦,有点小多。

1,由于N很大,不能用递归,要用大数乘法.
#include <stdio.h>
int main()
{
int n;
int a[9000]; //确保保存最终运算结果的数组足够大
int digit = 1; //位数
int temp; //阶乘的任一元素与临时结果的某位的乘积结果
int i,j,carry; //进位
printf("please in put n:\n");
scanf("%d",&n);
a[0] = 1; //将结果先初始化为1
for(i = 2; i <= n; i++)
{ //开始阶乘,阶乘元素从2开始依次"登场"
//按最基本的乘法运算思想来考虑,将临时结果的每位与阶乘元素相乘
for( j = 1, carry = 0; j <= digit; j++)
{ //carry:进位
temp = a[j-1] * i + carry; //相应阶乘中的一项与当前所得临时结果的某位//相乘(加上进位)
a[j-1] = temp % 10; //更新临时结果的位上信息
carry = temp / 10; //看是否有进位
}
while(carry)
{ //如果有进位
a[++digit-1] = carry % 10; //新加一位,添加信息。位数增1
carry = carry/10; //看还能不能进位
}
}