码迷,mamicode.com
首页 > 其他好文 > 详细

math

时间:2019-06-23 15:51:19      阅读:90      评论:0      收藏:0      [点我收藏+]

标签:注意   嵌入   temp   scan   cstring   问题   gcd   ret   题目   

lucas:

 

T2:

问题描述

给你一个除法表达式:X1/X2/X3/X4……/Xk 其中Xi是正整数并且 Xi <= 2 000 000 000( 1<=i<=k,k<=10 000 )。除法表达式应当按照从左到右的顺序求结果,例如:表达式1/2/1/2的值是1/4,你可以在表达E中嵌入括号改变计算顺序,例如表达式(1/2)/(1/2)的值是1。现在给你一个除法表达式E,计算是否能够通过加括号(或者不加)得到表达式E‘ ,E‘的值为整数。

输入文件

输入数据包括多组数据,每组数据占一行,给出的是题目描述的表达式E,E中不含空格。

输出文件

每组测试数据占一行如果能找到题目中描述的E‘ 则输出"YES"(不含引号),否则输出"NO" (不含引号)。

样例输入

1/2/1/2
2/3

样例输出

YES
NO

限制与约定

时间限制:1s

空间限制:128MB

思路 :第二个放在分母上,其他的都可以放在分子上。。。超int。。。

std:

#include<cstdio>
#include<cstring>
#include<algorithm>
#define LL long long
using namespace std;
const int maxn=1e4+5;
char ch[maxn*15];
int a[maxn],temp,k;
inline int read(){
    int a=0;
    while(ch[temp]<0||9<ch[temp])temp++;
    while(0<=ch[temp]&&ch[temp]<=9){
        a=(a<<1)+(a<<3)+ch[temp++]-0;    
    } 
    return a; 
}
int main(){
    while(scanf("%s",ch+1)>0){
        int len=strlen(ch+1);
        temp=1;k=0; 
        for(int i=1;ch[temp]!=\0;i++,k++){
            a[i]=read();
            //printf("%d ",a[i]);
        }
        for(int i=1;i<=k;i++){
            if(i!=2){
                int d=__gcd(a[i],a[2]);//使用gcd约分,注意别超int。。。
                a[2]/=d;//第二个数一定是分母
            }
        }
        printf(a[2]==1?"YES\n":"NO\n");
    }
    return 0;
}

 

math

标签:注意   嵌入   temp   scan   cstring   问题   gcd   ret   题目   

原文地址:https://www.cnblogs.com/a-blog-of-taojiayi-2003/p/11072943.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!