刷题记录

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值