| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1360 人关注过本帖, 1 人收藏
标题:听听高手的想法~
只看楼主 加入收藏
虾B写
Rank: 8Rank: 8
来 自:湖北
等 级:蝙蝠侠
威 望:3
帖 子:395
专家分:922
注 册:2009-10-1
收藏
得分:0 
还有种情况,
其它语言带小数的除法有误差,不知道C有没有,这种情况也好判断,S.length-2的数全部==9

白娘故意下雨骗许仙的伞。祝英台十八里相送时装疯卖傻调戏梁山伯。七仙女挡住了董永的去路。牛郎趁织女洗澡时拿走了她的衣服。。。这些故事告诉我们;伟大爱情的开始,总归的有一个要先耍流氓!
2010-08-11 17:46
jack10141
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:陕西西安
等 级:小飞侠
威 望:6
帖 子:706
专家分:2271
注 册:2010-8-10
收藏
得分:0 
以下是引用sdmscu在2010-8-11 17:23:00的发言:

想请您  介绍下  


      a=t*10/n;
       t=(t*10)%n;
       if(t==0 || t==m )break;



小弟看不懂!!!!!!!!!!!!1
看看下面的除法算式图,自己慢慢体会了(没有找到有小数部分的将就着看吧!)
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册
再补充一张图片!

[ 本帖最后由 jack10141 于 2010-8-11 18:24 编辑 ]

Coding就像一盒巧克力,你永远不会知道你会遇到什么BUG
别跟我说你是不能的,这让我愤怒,因为这侮辱了你的智慧
2010-08-11 18:02
promising
Rank: 3Rank: 3
来 自:上海
等 级:论坛游侠
帖 子:87
专家分:147
注 册:2009-8-31
收藏
得分:0 
回复 9楼 虾B写
以下是引用虾B写在2010-8-11 17:38:38的发言:

循环不一定是从第一个小数开始
直接除完后得到小数位,如果小数位达到最长,就基本上是了。
 
然后历遍
如:s=0.357123123123123
取3==5
  35==71
  357==123
.........
  5==7
  57==12
........
1==2
12==31
123==123
 
不过还有一种情况,S=0.1234567890123456
a==b
当A的长度超过S长度一半时,A的比较长度==B
如小数:s=0.333555333555,先不管3==3,一直检测到333555==333555是吧
就是存储的空间要很大,不过数字较小的话是可以接受的~ ,

说实话,m,n是在1000范围内的正整数,像1/998这样的分数,位数还是不行的

   美中不足啊~~~~~

向前走着……
2010-08-11 20:09
promising
Rank: 3Rank: 3
来 自:上海
等 级:论坛游侠
帖 子:87
专家分:147
注 册:2009-8-31
收藏
得分:0 
回复 10楼 jack10141
验算了下真得不错,只是输出界面有点不清晰~

说说你的想法吧,这么大段程序,要看的话还是很吃力的~

向前走着……
2010-08-11 20:24
jack10141
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:陕西西安
等 级:小飞侠
威 望:6
帖 子:706
专家分:2271
注 册:2010-8-10
收藏
得分:0 
回复 13楼 promising
我的算法其实就是模拟了除法运算,逻辑上肯定没问题 呵呵,
我写好后做了少量测试,
请大家特别是LZ帮我们测试下还有无其他问题!

小程序,没有加注释,一会更新下

加好了 你自己看一下 有不明白的地方再探讨
程序代码:
/*
    读入自然数m和n(0<=m<n<=1000),判断分数m/n是
    有限小数还是无限小数。如果m/n是有限小数,则
    输出分数的值;如果m/n为循环小数,则把循环部
    分括在括号中打印出来~
*/ 
main()
{
    int i,j;               //循环控制变量
    int m,n;               //两个输入变量
    int a[1001];           //存放小数部分的数组,每个元素存放小数部分的一个数位
    int t;                 //临时存放每次除法的余数
    int at[1001]={0};       //依次存放每一次除法运算后的余数,备用
    int startloop;         //循环小数的循环起点下标
    printf("请输入m,n满足0<=m<=n<=1000:");
    scanf("%d%d",&m,&n);
    for(t=m,i=0;i<1000;i++) //题目中的结果最多有1000位小数 就能精确表示了,你赞同否?
    {                      
       a[i]=t*10/n;         //上次的余数加后缀0(乘10) 再除以n 取整,即为 当前数位的数值
       t=(t*10)%n;          //当次除法的余数
       at[i]=t;             //余数放到数组中
       for(startloop=0;startloop<i;startloop++)   //检查之前有没出现过与当前余数相同的余数
          if(t==at[startloop])                    //出现同余情况,则意味着开始小数部分的循环
          {
              t=-1;         //-1 是区别于普通的余数以及余数为0的情况
              break;
          }
       if(t==-1 || t==0 || t==m )break;           //t=-1为形如 1/15=0.1(3)的情况
                                                  //t=0 为除尽了 不是循环小数
                                                  //t=m 说明该小数从第一位小数位即开始循环
    }

    printf("\n%d/%d=0.",m,n);

    if(t==0)                                      //t=0 为除尽了 不是循环小数
      for(j=0;j<=i;j++)printf("%d",a[j]);

    if(t==-1)                                     //t=-1为形如 1/15=0.1(3)的情况
      for(j=0;j<=startloop;j++)printf("%d",a[j]);

    if(t==m) startloop=-1;                        //t=m 说明该小数从第一位小数位即开始循环

    if(t==m || t==-1)                             //t=-1与t=m 两种情况共同输出循环部分的小数
    {
      printf("(");
      for(j=startloop+1;j<=i;j++)printf("%d",a[j]);
      printf(")");
    }
    printf("\n");
}


[ 本帖最后由 jack10141 于 2010-8-11 21:50 编辑 ]

Coding就像一盒巧克力,你永远不会知道你会遇到什么BUG
别跟我说你是不能的,这让我愤怒,因为这侮辱了你的智慧
2010-08-11 20:25
promising
Rank: 3Rank: 3
来 自:上海
等 级:论坛游侠
帖 子:87
专家分:147
注 册:2009-8-31
收藏
得分:0 
回复 15楼 jack10141
小数是没问题,大数的话在输出上有点不清晰(那个0.0,你改下去掉吧)输出界面行的话该明白点~
程序应该没问题的。

向前走着……
2010-08-11 20:34
jack10141
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:陕西西安
等 级:小飞侠
威 望:6
帖 子:706
专家分:2271
注 册:2010-8-10
收藏
得分:0 
回复 16楼 promising
你想要什么效果的输出呢?自己设计好了!

Coding就像一盒巧克力,你永远不会知道你会遇到什么BUG
别跟我说你是不能的,这让我愤怒,因为这侮辱了你的智慧
2010-08-11 20:40
快速回复:听听高手的想法~
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017205 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved