用分数表示结果
#include <stdio.h>
/*
函数名:Gcd
参数列表:长整型数M,N(M>N)
函数功能:用欧几里得算法求最大公约数
返回值:M与N的最大公约数
*/
long Gcd(long M,long N)
{
long Rem;
while(N > 0)
{
Rem = M % N;
M = N;
N = Rem;
}
return M;
}
/*
函数名:fun
参数列表:单项分子a,单项分母b,最终分子alast,最终分母blast,项数n
函数功能,分数求和
返回值:无
*/
int fun(int *a,int *b,long *alast,long *blast,int n)
{
if(n == 0) //结束递归条件
{
return -1;
}
int i;
*alast=(*alast)*(*b)+(*blast)*(*a);
*blast=(*blast)*(*b);
//对最终值进行约分
long factor = Gcd(*alast,*blast); //最大公约数
*alast=*alast/factor;
*blast=*blast/factor;
printf("+%d/%d",*a,*b); //输出一项到屏幕
*a = *a + *b; //第n项与n-1项之间的关系
*b = *a - *b;
n--;
fun(a,b,alast,blast,n); //递归
return 0;
}
int main()
{
int n;
int a = 3,b = 2;
long alast = 2,blast = 1;
printf("Input n="); //输入需要求的项数
scanf("%d",&n);
printf("2/1");
fun(&a,&b,&alast,&blast,n-1);
printf(" = %ld/%ld\n",alast,blast);
return 0;
}
输入的n值太大会导致分子分母值超过8字节,无法显示正确的结果