除法表达式
时间限制:
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
-
-
除法中是否能整除问题,X1/X2/X3/..../Xn=X1*X2*X3.....*Xn/X2.求X2与其它数的最大公约数,若X2为1即能整除。
-
AC代码:
-
-
#include<iostream> #include<algorithm> #include<cstring> #include<cstdio> using namespace std; int a[1000005]; int GCD(int a,int b) { if(a<b)swap(a,b); return b==0?a:GCD(b,a%b); } int judge(int m) { a[1]/=GCD(a[1],a[0]); for(int i=2;i<m;++i) { a[1]/=GCD(a[i],a[1]); if(a[1]==1) return 1; } return 0; } int main() { int n,m,i; char str[1000005]; scanf("%d",&n); while(n--) { memset(a,0,sizeof(a)); scanf("%s",&str); for (i=0,m=0;str[i]!='\0';++i) { if(str[i]>='0'&&str[i]<='9') a[m]=a[m]*10+str[i]-'0'; else m++; } if(judge(m+1)) { printf("YES\n"); } else { printf("NO\n"); } } return 0; }
-
首先输入一个N,表示有N组测试数据,