鱼C论坛

 找回密码
 立即注册
查看: 6485|回复: 21

[技术交流] 数据结构与算法:分数的加减法

[复制链接]
头像被屏蔽
发表于 2011-4-26 16:23:01 | 显示全部楼层 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-5-16 22:35:48 | 显示全部楼层
这个百度上有答案,目前我发现的就有两种,虽然不懂:lol
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-5-19 14:34:41 | 显示全部楼层
本帖最后由 LNH_Sniper 于 2011-5-19 16:28 编辑
  1. #include "stdio.h"
  2. #include "string.h"
  3. #include "math.h"


  4. int divisor(int molecule, int denominator)
  5. {
  6.         int temp;
  7.         temp = molecule;
  8.         if( denominator % molecule == 0)
  9.                 return molecule;
  10.         else
  11.         {
  12.                 while( !((denominator % temp == 0) && ( molecule % temp == 0)) )
  13.                 {
  14.                         temp --;
  15.                 }
  16.                 return temp;
  17.         }
  18. }
  19. int main()
  20. {
  21.         char buf[100];
  22.         char *s;
  23.         int flag_num, flag_op, int_de, int_mo;
  24.         float num[4] = {0,0,0,0}, result;
  25.         float *temp;
  26.         temp = num;
  27.         flag_num = 0;
  28.         int_de = 0;
  29.         int_mo = 0;
  30.         gets( buf );
  31.         s = buf;
  32.         while( *s )
  33.         {
  34.                 if( ( *s - 48 ) <= 9 && ( *s - 48 ) >= 0 )
  35.                 {
  36.                          *temp = (*temp) * 10 + ( *s - 48 );       
  37.                 }
  38.                 if( *s == '/' || *s == '+' || *s == '-')
  39.                 {
  40.                         if(*s == '+')
  41.                                 flag_op = 1;
  42.                         if(*s == '-')
  43.                                 flag_op = 0;
  44.                         temp++;
  45.                 }
  46.                 s++;
  47.         }
  48.         if(flag_op == 0)
  49.                 result = num[0] / num[1] - num[2] / num[3];
  50.         else
  51.                 result = num[0] / num[1] + num[2] / num[3];

  52.         if(result > 0)
  53.                 flag_op = 1;
  54.         if(result < 0)
  55.                 flag_op = 0;
  56.         if(result == 0)
  57.                 flag_op = -1;
  58.         while( result != (int)result )
  59.         {
  60.                 result = result * 10;
  61.                 flag_num++;
  62.         }
  63.         int_de = (int)pow(10,flag_num);
  64.         if(flag_op == 1)
  65.                 printf("%d/%d", (int)result / divisor((int)result,int_de),int_de / divisor((int)result,int_de));
  66.         if(flag_op == 0)
  67.                 printf("-%d/%d", (int)result / divisor((int)result,int_de),abs((int)int_de / divisor((int)result,int_de)));
  68.         if(flag_op == -1)
  69.                 printf("%d",0);
  70.         printf("\n");
  71.         return 0;

  72. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-6-10 11:24:25 | 显示全部楼层
不对呢.....
QQ截图20110610112415.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-6-10 14:44:32 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-6-21 18:11:50 | 显示全部楼层
本帖最后由 wangyexin 于 2011-6-21 18:21 编辑

  1. #include<iostream>
  2. using namespace std;
  3. int gcd(int n,int m)
  4. {
  5.     while(n!=m)
  6.     {
  7.         while(n>m)n-=m;
  8.         while(n<m)m-=n;  
  9.     }
  10.     return n;
  11. }
  12. int main()
  13. {
  14.     int a,b,c,d,k,res,flag;
  15.     char ch,o;   
  16.     while(scanf("%d%c%d%c%d%c%d",&a,&ch,&b,&o,&c,&ch,&d)!=EOF)
  17.     {                           
  18.          flag=0;
  19.          if(o=='+')
  20.          {
  21.              res=a*d+c*b;         
  22.          }
  23.          else
  24.          {
  25.              res=a*d-c*b;   
  26.          }
  27.          if(res==0)
  28.          {
  29.             cout<<0<<endl;
  30.          }
  31.          else
  32.          {
  33.              if(res<0)
  34.              {
  35.                  res=-res;
  36.                  flag=1;         
  37.              }
  38.              if(flag)printf("-");
  39.              k=gcd(b*d,res);
  40.              printf("%d/%d",res/k,b*d/k);
  41.          }
  42.     }
  43.     system("pause");
  44.     return 0;
  45. }
复制代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-4-6 21:59:55 | 显示全部楼层
无回帖,不论坛,这才是人道。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-4-8 16:51:59 | 显示全部楼层
激动人心,无法言表!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-4-22 02:31:07 | 显示全部楼层
强烈支持楼主ing……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-4-22 07:30:52 | 显示全部楼层
楼主太厉害了,谢谢分享!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-5-16 13:33:23 | 显示全部楼层
无回帖,不论坛,这才是人道。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-7-2 21:25:34 | 显示全部楼层
看帖,回复支持下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-7-2 23:50:48 | 显示全部楼层
看看老帖,支持下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-7-3 19:38:27 | 显示全部楼层
看看,回复支持下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-7-4 18:57:10 | 显示全部楼层
再看看,回帖支持支持
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-7-4 20:38:17 | 显示全部楼层
再看看,支持下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-7-6 00:35:40 | 显示全部楼层
楼主加油,鱼C加油!我们都看好你哦!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-7-10 01:16:46 | 显示全部楼层
怡静感谢楼主分享!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-7-11 02:26:50 | 显示全部楼层
多谢楼主!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-7-15 00:30:02 | 显示全部楼层
祝鱼C论坛红红火火!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 23:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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