标签:
给出一个这样的除法表达式:X1/X2/X3/···/Xk,其中Xi是正整数。除法表达式应当按照从左到右的顺序求和,例如表达式1/2/1/2的值为1/4。但是可以在表达式中嵌入括号以改变计算顺序,例如表达式(1/2)/(1/2)的值为1.
1 1/2/1/2
YES
首先将数字要分离开来,然后就是x1一定只能是分子,x2一定是分母,那么让X1/X2/X3/···/Xk尽可能使整数的话,很明显,应该让分母的个数减少即分母除了x2之外不再有其他数字,所以问题转换成了(x1*x3*x4*x5....*xk)/x2是否为整数,可以用最大公约数,不断的减少x2的值,最后检查x2是否为1即可知道是否可以变为整数
/* Memory: 1208 KB Time: 12 MS Language: C/C++ Result: Accepted */ #include <cstdio> #include <cstring> #include <algorithm> using namespace std; typedef long long LL; const int maxn=1e6+5; int T; char str[maxn]; int gcd(int a,int b) { return b?gcd(b,a%b):a; } int main() { scanf("%d",&T); while(T--) { scanf("%s",str); bool flag=true; int x,y=0,cnt=0,n=strlen(str); for(int i=0; i<n; i++) { if(str[i]=='/') { y=atoi(str+i+1); break; } } for(int i=0; i<n; i++) { cnt++; x=atoi(str+i); while(str[i]!='/') { i++; if(i>=n)break; } if(cnt==2)continue; if(y==0)break; y/=gcd(x,y); } if(y>1)printf("NO\n"); else printf("YES\n"); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/qq_18661257/article/details/47156337