鱼C论坛

 找回密码
 立即注册
查看: 2191|回复: 4

凑除法表达式,添加括号,使其结果为整数

[复制链接]
发表于 2016-2-2 13:25:42 | 显示全部楼层 |阅读模式
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

以下博客代码
  1. #include<stdio.h>
  2. #include<string.h>
  3. int gcd(int a,int b)//公约数函数a<b(自己默认)
  4. {
  5.          int t;
  6.          if(a>b)
  7.          {
  8.                   t=a;
  9.                   a=b;
  10.                   b=t;
  11.          }
  12.          while(a!=0)
  13.          {
  14.                   t=b;
  15.                   b=a;
  16.                   a=t%b;
  17.          }
  18.          return b;
  19. }


  20. char s[1100005];//注意字符串的程度,因为很大,所以放在外面宏定义
  21. int main()
  22. {
  23.          int a[10005],i,j,k,s2,n,len,sum;
  24.          while(gets(s))
  25.          {
  26.                   len=strlen(s);
  27.                   if(len==1)
  28.                   {
  29.                           printf("YES\n");
  30.                           continue;
  31.                   }
  32.                   j=0;sum=0;
  33.                   for(i=0;i<len;i++)//把字符串里的数字一一取出来
  34.                   {
  35.                      if(s[i]!='/')
  36.                              sum=sum*10+(s[i]-'0');
  37.                      else
  38.                      {
  39.                              a[j++]=sum;
  40.                              sum=0;
  41.                      }
  42.                   }         //这里是我自己添加的,发现最后一位数没有存进去
  43.                   a[j]=sum; //不知道最后这一位是不是可以省的
  44.                   s2=a[1]/gcd(a[0],a[1]);
  45.                   for(i=2;i<=j;i++)
  46.                   {
  47.                     s2=s2/gcd(s2,a[i]);
  48.                     if(s2==1)
  49.                       break;
  50.                   }
  51.                   if(s2==1)
  52.                     printf("YES\n");
  53.                   else
  54.                     printf("NO\n");
  55.        
  56.          }
  57. }
复制代码

最佳答案

查看完整内容

(1/(1/3))/1/(3/7)?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-2-2 13:25:43 | 显示全部楼层
(1/(1/3))/1/(3/7)?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-2-2 18:40:25 | 显示全部楼层
楼上的已经帮你解决了,我不知道这个有什么用途,楼主可以透露下么
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-2-2 20:15:27 | 显示全部楼层

666,我没想到
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-2-2 20:16:31 | 显示全部楼层
ligen超越 发表于 2016-2-2 18:40
楼上的已经帮你解决了,我不知道这个有什么用途,楼主可以透露下么

没什么用途,就是acm上的竞赛题目,给出题目,写出相应符合要求的代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-21 21:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表