除法表达式
时间限制:
1000 ms | 内存限制:
65535 KB
难度:
3
-
描述
-
给出一个这样的除法表达式:X1/X2/X3/···/Xk,其中Xi是正整数。除法表达式应当按照从左到右的顺序求和,例如表达式1/2/1/2的值为1/4。但是可以在表达式中嵌入括号以改变计算顺序,例如表达式(1/2)/(1/2)的值为1.
-
输入
-
首先输入一个N,表示有N组测试数据,
每组数据输入占一行,为一个除法表达式,
输入保证合法。
使表达式的值为整数。k<=10000,Xi<=100000000.
输出
- 输出YES或NO 样例输入
-
1 1/2/1/2
样例输出
-
YES
来源
- 爱生活 上传者
-
TCM_张鹏
思路:第一个数一定是分子,第二个数一定是分母,后边其他的数都可以通过加不加括号,变成分子或分母,只要找到有个数能把第二个数消成1就行了ac代码
#include<stdio.h> #include<string.h> #include<stdlib.h> char s[1000005]; int a[1000005]; int gcd(int a,int b) { if(a<b) { int t=a; a=b; b=t; } if(b==0) return a; else return gcd(b,a%b); } int main() { int t; scanf("%d",&t); while(t--) { char *p; int m,n,j=0,i; int ans; scanf("%s",s); p=strtok(s,"/"); a[j++]=atoi(p); while(p) { p=strtok(NULL,"/"); if(p==NULL) break; a[j++]=atoi(p); } ans=a[1]/gcd(a[0],a[1]); for(i=2;i<j;i++) { ans=ans/gcd(ans,a[i]); if(ans==1) break; } if(ans==1) printf("YES\n"); else printf("NO\n"); } }
-
首先输入一个N,表示有N组测试数据,