|
25鱼币
本帖最后由 独一无② 于 2016-2-2 13:27 编辑
有一个除法表达式,形如:x1/x2/x3/x4.....
输入一个表达式,添加括号,使其的表达式结果为整数。可以输出yes,不行输出no
百度了一下,看到了一篇博客解法:
http://blog.sina.com.cn/s/blog_adca050401018h0z.html
但是对其原理还是不太明白。还有一个疑问,不知道是不是我题目理解错了
我找了一个例子:1/3/1/3/7
输入这个例子应该是输出no吧,应该没什么可以整除7了,但是他的代码结果却是yes
以下博客代码
- #include<stdio.h>
- #include<string.h>
- int gcd(int a,int b)//公约数函数a<b(自己默认)
- {
- int t;
- if(a>b)
- {
- t=a;
- a=b;
- b=t;
- }
- while(a!=0)
- {
- t=b;
- b=a;
- a=t%b;
- }
- return b;
- }
- char s[1100005];//注意字符串的程度,因为很大,所以放在外面宏定义
- int main()
- {
- int a[10005],i,j,k,s2,n,len,sum;
- while(gets(s))
- {
- len=strlen(s);
- if(len==1)
- {
- printf("YES\n");
- continue;
- }
- j=0;sum=0;
- for(i=0;i<len;i++)//把字符串里的数字一一取出来
- {
- if(s[i]!='/')
- sum=sum*10+(s[i]-'0');
- else
- {
- a[j++]=sum;
- sum=0;
- }
- } //这里是我自己添加的,发现最后一位数没有存进去
- a[j]=sum; //不知道最后这一位是不是可以省的
- s2=a[1]/gcd(a[0],a[1]);
- for(i=2;i<=j;i++)
- {
- s2=s2/gcd(s2,a[i]);
- if(s2==1)
- break;
- }
- if(s2==1)
- printf("YES\n");
- else
- printf("NO\n");
-
- }
- }
复制代码 |
|