| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1360 人关注过本帖, 1 人收藏
标题:听听高手的想法~
只看楼主 加入收藏
promising
Rank: 3Rank: 3
来 自:上海
等 级:论坛游侠
帖 子:87
专家分:147
注 册:2009-8-31
结帖率:100%
收藏(1)
已结贴  问题点数:20 回复次数:16 
听听高手的想法~
如题:
读入自然数m和n(0<=m<n<=1000),判断分数m/n是有限小数还是无限小数。如果m/n是有限小数,则输出分数的值;如果m/n为循环小数,则把循环部分括在括号中打印出来~
搜索更多相关主题的帖子: 自然数 
2010-08-11 12:50
iFreeBSD
Rank: 4
等 级:业余侠客
威 望:4
帖 子:474
专家分:236
注 册:2007-11-5
收藏
得分:1 
坐等高手听想法。

without further ado, let’s get started
2010-08-11 13:36
m1c2f4843
Rank: 1
等 级:新手上路
帖 子:27
专家分:4
注 册:2010-7-30
收藏
得分:0 
这里应该有高手吧
2010-08-11 13:59
jack10141
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:陕西西安
等 级:小飞侠
威 望:6
帖 子:706
专家分:2271
注 册:2010-8-10
收藏
得分:0 
回复 楼主 promising
游过这里!

这个问题解决办法就像小学的时候学习除法是一样的!代码稍后贴出!
以下是初步的代码,你可以参考下,但是好像并不能对所有的输入有效,正在测试分析!
程序代码:
main()
{
    int i,j,m,n,a[1001],t;
    scanf("%d%d",&m,&n);
    for(t=m,i=0;i<1000;i++)
    {
       a[i]=t*10/n;
       t=(t*10)%n;
       if(t==0 || t==m )break;
    }
    printf("%d/%d=0.",m,n);
    if(t==0)
      for(j=0;j<=i;j++)printf("%d",a[j]);
    if(t==m)
    {
      printf("(");
      for(j=0;j<=i;j++)printf("%d",a[j]);
      printf(")");
    }
    printf("\n");
}


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

Coding就像一盒巧克力,你永远不会知道你会遇到什么BUG
别跟我说你是不能的,这让我愤怒,因为这侮辱了你的智慧
2010-08-11 15:49
promising
Rank: 3Rank: 3
来 自:上海
等 级:论坛游侠
帖 子:87
专家分:147
注 册:2009-8-31
收藏
得分:0 
回复 4楼 jack10141
正如你所说,你打算除到什么时候,来确定它是个循环小数?又打算除到什么时候,你又能确定循环节已经出现并确定下来~?

向前走着……
2010-08-11 16:18
promising
Rank: 3Rank: 3
来 自:上海
等 级:论坛游侠
帖 子:87
专家分:147
注 册:2009-8-31
收藏
得分:0 
回复 4楼 jack10141
‘a[i]=t*10/n;
  t=(t*10)%n;’
这段我欣赏,但是这不代表你的程序是对的~

你貌似假定,循环小数都是像1/3=0.3333,1/7=0.142857142857,
但是你是不是考虑到还有这样的循环小数呢?如2/15=0.13333~

向前走着……
2010-08-11 17:09
jack10141
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:陕西西安
等 级:小飞侠
威 望:6
帖 子:706
专家分:2271
注 册:2010-8-10
收藏
得分:0 
以下是引用promising在2010-8-11 17:09:08的发言:

 ‘a=t*10/n;
  t=(t*10)%n;’
这段我欣赏,但是这不代表你的程序是对的~

你貌似假定,循环小数都是像1/3=0.3333,1/7=0.142857142857,
但是你是不是考虑到还有这样的循环小数呢?如2/15=0.13333~
对啊,前面我假定循环小数从第一位开始循环,但是有一些不是的!正在更改!

Coding就像一盒巧克力,你永远不会知道你会遇到什么BUG
别跟我说你是不能的,这让我愤怒,因为这侮辱了你的智慧
2010-08-11 17:13
sdmscu
Rank: 2
等 级:论坛游民
帖 子:32
专家分:15
注 册:2010-7-7
收藏
得分:0 
回复 4楼 jack10141
想请您  介绍下  


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



小弟看不懂!!!!!!!!!!!!1
2010-08-11 17:23
虾B写
Rank: 8Rank: 8
来 自:湖北
等 级:蝙蝠侠
威 望:3
帖 子:395
专家分:922
注 册:2009-10-1
收藏
得分:9 
循环不一定是从第一个小数开始
直接除完后得到小数位,如果小数位达到最长,就基本上是了。

然后历遍
如: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

白娘故意下雨骗许仙的伞。祝英台十八里相送时装疯卖傻调戏梁山伯。七仙女挡住了董永的去路。牛郎趁织女洗澡时拿走了她的衣服。。。这些故事告诉我们;伟大爱情的开始,总归的有一个要先耍流氓!
2010-08-11 17:38
jack10141
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:陕西西安
等 级:小飞侠
威 望:6
帖 子:706
专家分:2271
注 册:2010-8-10
收藏
得分:10 
以下是最终版程序,请大家参考
程序代码:
main()
{
    int i,j,m,n,a[1001],t,at[1001]={0},startloop;
    scanf("%d%d",&m,&n);
    for(t=m,i=0;i<1000;i++)
    {
       a[i]=t*10/n;
       t=(t*10)%n;
       at[i]=t;
       for(startloop=0;startloop<i;startloop++)
          if(t==at[startloop])
          {
              t=-1;
              break;
          }
       if(t==-1 || t==0 || t==m )break;
    }

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

    if(t==0)
      for(j=0;j<=i;j++)printf("%d",a[j]);

    if(t==-1)
      for(j=0;j<=startloop;j++)printf("%d",a[j]);

    if(t==m) startloop=-1;

    if(t==m || t==-1)
    {
      printf("(");
      for(j=startloop+1;j<=i;j++)printf("%d",a[j]);
      printf(")");
    }
    printf("\n");
}
........

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



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

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