编译错误 求指教 分数加减 可能是越界了
分数加减法编写一个C程序,实现两个分数的加减法
输入
输入包含多行数据
每行数据是一个字符串,格式是"a/boc/d"。
其中a, b, c, d是一个0-9的整数。o是运算符"+"或者"-"。
数据以EOF结束
输入数据保证合法
输出
对于输入数据的每一行输出两个分数的运算结果。
注意结果应符合书写习惯,没有多余的符号、分子、分母,并且化简至最简分数
样例输入
1/8+3/8
1/4-1/2
1/3-1/3
源代码:
#include<stdio.h>
int p,q;
int main()
{
char a[1000],ch;
int i,min,son,mon;
void fact(int mon,int son);
while((gets(a))!=NULL)
{ a[0]=a[0]-48;
a[2]=a[2]-48;
a[4]=a[4]-48;
a[6]=a[6]-48;
min=(a[2]<a[6]?a[2]:a[6]);
for(i=1;;i++)
{
if((min*i%a[6]==0)&&(min*i%a[2]==0))
break;
}
mon=min*i;
a[0]=mon/a[2]*a[0];
a[4]=mon/a[6]*a[4];
if((a[3]=='-')&&(a[0]<=a[4]))
{
if(a[0]==a[4])
printf("0\n");
else
{
ch='-';
son=a[4]-a[0];
fact(mon,son);
printf("%c%d/%d\n",ch,q,p);
}
}
else
{
son=a[0]+a[4];
fact(mon,son);
printf("%d/%d\n",q,p);
}
}
return 0;
}
void fact(int mon,int son)
{ int r,m,n;
m=mon;
n=son;
r=1;
while(r!=0)
{
r=m%n;
m=n;
if(r!=0)
n=r;
}
p=mon/n;
q=son/n;
}