PAT刷题记录
甲级 rational sum
更加优化的解法待发掘,目前的算法需要注意一些条件,比如被除数为0,或者为整数等的输入格式,注意不能遗漏,同时列举的条件要看是否能够并列。
比之前的乙级题难度并没有太多变化,可能多了输出整数和参数为0时的限制条件,目前只用了if来分别解决这些特殊项。
#include "stdio.h"
int common(int m,int n)
{ int r; if(m>=n)
{ while(m%n)
{ r=m%n; m=n;n=r; }
return n; }
else {
while(n%m) {
r=n%m; n=m; m=r; }
return m; }}
int main()
{ int n;
int up,down;
int mid;
int A[100],B[100];
scanf("%d",&n);
for(int i=0;i<n;i++)
{ scanf("%d/%d",&A[i],&B[i]); }
down=B[0];up=A[0];
for(int i=0;i<n-1;i++)
{ mid=common(down,B[i+1]);
up=up*B[i+1]/mid+A[i+1]*down/mid;
down=down*B[i+1]/mid; }
if(up!=0)
{mid=common(up,down);
up=up/mid;
down=down/mid;}
if(down<0&&up>0)
{up=-up;down=-down;}
if(up/down==0&&up!=0)
printf("%d/%d\n",up%down,down);
if(up/down!=0&&up%down!=0)
printf("%d %d/%d\n",up/down,up%down,down);
if(up==0)
printf("%d\n",up);
if(up%down==0&&up!=0)
printf("%d\n",up/down);}```cpp