HZNU1883CCJ的直线化简
题目
Description
CCJ最近刚学会了直线的方程表示,但他在化简直线时遇到了困难,请你帮帮他。
给你一条斜截式表示的直线,请你将其化简成一般形式
Input
首先一个整数T(0<T<=1000),代表有T组数据
每组数据包含一行,一条以斜截式表示的直线
格式严格遵守:y=[a]/[b]x+[c]
其中a,b,c均为100以内的正整数,没有任何空格。
每行的长度不超过1000个字符。
Output
对于每组数据,输出对应的化到最简的一般形式的直线。
题解
这道题一个点是getchar,把第一个t输入后的回车去掉后才能读后面的直线方程。因为方程两边同时乘b后还有一个化简的工作,所以要得ab的最大公约数,然后逐步打印x,y前的系数和常数。因为输入严格遵守一个格式所以输出没有什么难度。
AC代码
input
2
y=1/3x+5
y=100/100x+10
output
x-3y+15=0
x-y+10=0
#include <cstdio>
#include <cmath>
#include<iostream>
using namespace std;
int gcd(int a,int b)
{
if(b==0)return a;
return gcd(b,a%b);
}
int main(){
int t;
cin>>t;
while(t--)
{
int a,b,c;
getchar();
scanf("y=%d/%dx+%d",&a,&b,&c);
int m=gcd(a,b);
if (a / m != 1)
{
printf("%d", a / m);
}
printf("x-");
if (b / m != 1)
{
printf("%d", b / m);
}
printf("y+%d=0\n", c*b / m);
}
return 0;
}