两个分数的加减法(1004)
2018-03-11 11:27
155 查看
杭电 http://acm.hdu.edu.cn/webcontest/contest_login.php?cid=12226 密码 acm000
Problem Description:
编写一个C程序,实现两个分数的加减法
Input:
输入包含多行数据 <br>每行数据是一个字符串,格式是"a/boc/d"。 <br> <br>其中a, b, c, d是一个0-9的整数。o是运算符"+"或者"-"。 <br> <br>数据以EOF结束 <br>输入数据保证合法
Output:
对于输入数据的每一行输出两个分数的运算结果。 <br>注意结果应符合书写习惯,没有多余的符号、分子、分母,并且化简至最简分数
Sample Input:
1/8+3/8
1/4-1/2
1/3-1/3
Sample Output:
1/2
-1/4
0
注意:这道题的主要问题在于不知道算出来的分数是否为最简式,这里就用到了我们之前写到的关于两个数的最大公约数,即判断出分子和分母的最大公约数,然后分子分母都除以这个最大公约数,最后得到的结果就是这个分数的最简分数。
My DaiMa:
#include<stdio.h>
#include<math.h>
int main()
{
int j,m,n,x,y;
char c[7];
while(~scanf("%s",c))
{
if(c[2]==c[6])
{
m=c[2]-'0';
if(c[3]=='+')
n=(c[0]-'0')+(c[4]-'0');
else
n=(c[0]-'0')-(c[4]-'0');
}
else
{
m=(c[2]-'0')*(c[6]-'0'); //将分母都化成相同的数,最后再统一化简
c[0]=(c[0]-'0')*(c[6]-'0'); //同时分子也需要变
c[4]=(c[4]-'0')*(c[2]-'0');
if(c[3]=='+')
n=c[0]+c[4];
else
n=c[0]-c[4];
}
if(n==0) //这是结果为0的情况,只要分子是0,最后结果就是0
printf("0\n");
else if(n%m==0) //这是例如(1/2+1/2=1)等结果是整数的情况
printf("%d\n",n/m);
else //另外的都是一些化简和不化简的情况
{
x=m; //分母都是正的,因为参与运算的是分子
y=n; //若分数为负,最后的负号也是在分子上,不会影响输出结果
n=fabs(n);
if(m<n)
{
j=m;
m=n;
n=j;
}
j=n;
while(m%n) //这就是判断出分子分母的最大公约数的方法
{
j=m%n;
m=n;
n=j;
}
printf("%d/%d\n",y/j,x/j); //最后分子分母都除以最大公约数 结果就是最简分数
}
}
return 0;
}
Problem Description:
编写一个C程序,实现两个分数的加减法
Input:
输入包含多行数据 <br>每行数据是一个字符串,格式是"a/boc/d"。 <br> <br>其中a, b, c, d是一个0-9的整数。o是运算符"+"或者"-"。 <br> <br>数据以EOF结束 <br>输入数据保证合法
Output:
对于输入数据的每一行输出两个分数的运算结果。 <br>注意结果应符合书写习惯,没有多余的符号、分子、分母,并且化简至最简分数
Sample Input:
1/8+3/8
1/4-1/2
1/3-1/3
Sample Output:
1/2
-1/4
0
注意:这道题的主要问题在于不知道算出来的分数是否为最简式,这里就用到了我们之前写到的关于两个数的最大公约数,即判断出分子和分母的最大公约数,然后分子分母都除以这个最大公约数,最后得到的结果就是这个分数的最简分数。
My DaiMa:
#include<stdio.h>
#include<math.h>
int main()
{
int j,m,n,x,y;
char c[7];
while(~scanf("%s",c))
{
if(c[2]==c[6])
{
m=c[2]-'0';
if(c[3]=='+')
n=(c[0]-'0')+(c[4]-'0');
else
n=(c[0]-'0')-(c[4]-'0');
}
else
{
m=(c[2]-'0')*(c[6]-'0'); //将分母都化成相同的数,最后再统一化简
c[0]=(c[0]-'0')*(c[6]-'0'); //同时分子也需要变
c[4]=(c[4]-'0')*(c[2]-'0');
if(c[3]=='+')
n=c[0]+c[4];
else
n=c[0]-c[4];
}
if(n==0) //这是结果为0的情况,只要分子是0,最后结果就是0
printf("0\n");
else if(n%m==0) //这是例如(1/2+1/2=1)等结果是整数的情况
printf("%d\n",n/m);
else //另外的都是一些化简和不化简的情况
{
x=m; //分母都是正的,因为参与运算的是分子
y=n; //若分数为负,最后的负号也是在分子上,不会影响输出结果
n=fabs(n);
if(m<n)
{
j=m;
m=n;
n=j;
}
j=n;
while(m%n) //这就是判断出分子分母的最大公约数的方法
{
j=m%n;
m=n;
n=j;
}
printf("%d/%d\n",y/j,x/j); //最后分子分母都除以最大公约数 结果就是最简分数
}
}
return 0;
}
相关文章推荐
- 两个分数的加减法,手动模拟
- 分数加减法
- 比较两个分数的大小
- 第十周(11.18-11.24)----分数计算----(2)对两个分数进行加减乘除
- NYOJ-分数加减法
- 编写一个应用程序,用户分别从两个文本框输入学术的姓名和分数,程序按成绩排序将这些学生的姓名和分数显示在一个文本区中。 程序运行效果如图:
- nyoj 111 分数加减法
- NYoj-分数加减法
- 分数加减法
- 分数的加减法——C语言初学者代码中的常见错误与瑕疵(11)
- 分数加减法
- 南阳理工ACM 111分数加减法
- nyoj 分数加减法
- NYOJ 题目111 分数加减法
- NYOJ111 分数加减法
- 分数加减法
- NYOJ111分数加减法
- 3979 分数加减法
- YT03-递推求解课后题目-1004 计算直线的交点数-(6.7日-烟台大学ACM预备队解题报告)分析: 将n 条直线排成一个序列,两条直线最多只有一个交点,三条直线最多有两个交点,直线n 和其他n
- NYOJ 111 分数加减法