1、題目連結
2、題意分析
(1)題意:給出兩個分數,求其加減乘除,寫出其計算過程。要求:輸出的數字元合規範
(2)分析:對于重複很多遍相同的要求,我們可以使用函數來解決這一類問題。
3、源代碼
#include <stdio.h>
#define size 102
long int array[2][2];//分别存儲分子,分母
//使用輾轉相除法得到最大公約數
long int getBigNumber(long a ,long b){
long int remain = a;
while(remain != 0){//如果餘數不等于0
remain = a % b;
a = b ;
b = remain;
}
return a; //傳回最大公約數
}
void change(long int a,long int b ){
int flag2 = 0;//用來标志是否輸出)号
//統一處理
if(a<0 && b<0){
a = (-1) * a;
b = (-1) * b;
}
else if(a < 0 && b > 0){
printf("(-");
a = -1 * a;
flag2 = 1;
}
else if(a > 0 && b < 0){
printf("(-");
b = -1 * b;
flag2 = 1;
}
//求出第一個數的簡寫形式
int flag1 = 0;
if(a >= b ){
printf("%ld",a / b);//輸出整數部分
a %= b;
flag1 = 1;
}
if(a!=0){
long temp = getBigNumber(a,b);
a /= temp;
b /= temp;
}
else{//a==0
if(!flag1){//如果一開始就比b小且為0
printf("0");
}
}
if(a != 0){
if(flag1){
printf(" %ld/%ld",a,b);
}
else{
printf("%ld/%ld",a,b);
}
}
if(flag2){
printf(")");
}
}
int main(){
long int number;
scanf("%ld/%ld %ld/%ld",&array[0][0],&array[0][1],&array[1][0],&array[1][1]);//輸入分子分母
long int sumA = 0, sumB = 1; //和
long int difA = 0, difB = 1; //差
long int proA = 1, proB = 1; //積
long int quoA = 0, quoB = 1; //商
//求和 與 求差
if(array[0][1] != array[1][1]){
if(array[0][1] % array[1][1] == 0){
sumA = array[1][0] * (array[0][1] / array[1][1]) + array[0][0];
sumB = array[0][1] ;
difA = array[0][0] - array[1][0] * (array[0][1] / array[1][1]) ;
difB = array[0][1] ;
}
else if( array[1][1] % array[0][1] == 0 ){
sumA = array[0][0] * (array[1][1] / array[0][1]) + array[1][0];
sumB = array[1][1];
difA = array[0][0] * (array[1][1] / array[0][1]) - array[1][0];
difB = array[1][1];
}
else{
sumA = array[0][0] * array[1][1] + array[1][0] * array[0][1];
sumB = array[0][1] * array[1][1];
difA = array[0][0] * array[1][1] - array[1][0] * array[0][1];
difB = array[0][1] * array[1][1];
}
}
else{//如果兩者相等
sumA = array[0][0] + array[1][0] ;
sumB = array[0][1];
difA = array[0][0] - array[1][0] ;
difB = array[0][1];
}
//求積
proA = array[0][0] * array[1][0] ;
proB = array[0][1] * array[1][1];
//求商
int flagQro = 1;
if(array[1][0]!=0){
quoA = array[0][0] * array[1][1] ;
quoB = array[0][1] * array[1][0];
}
else{
flagQro = 0;
}
//輸出加減乘除
change (array[0][0],array[0][1]);printf(" + ");change (array[1][0],array[1][1]);printf(" = ");change(sumA,sumB);printf("\n");
change (array[0][0],array[0][1]);printf(" - ");change (array[1][0],array[1][1]);printf(" = ");change(difA,difB);printf("\n");
change (array[0][0],array[0][1]);printf(" * ");change (array[1][0],array[1][1]);printf(" = ");change(proA,proB);printf("\n");
if(flagQro)
{
change (array[0][0],array[0][1]);printf(" / ");change (array[1][0],array[1][1]);printf(" = ");change(quoA,quoB);printf("\n");
}
else
{
change (array[0][0],array[0][1]);printf(" / ");change (array[1][0],array[1][1]);printf(" = ");printf("Inf\n");
}
}
/*
2/3 -4/2
1/2 2/4
1/3 -2/6
4/3 0/2
1/1 1/1
0/1 2/1
2/1 0/2
**/
4、總結