| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 309 人关注过本帖
标题:[求助]请教怎样改这个程序使它运行时间缩短一下
只看楼主 加入收藏
吐歌
Rank: 2
等 级:论坛游民
帖 子:43
专家分:19
注 册:2014-10-19
结帖率:100%
收藏
 问题点数:0 回复次数:3 
[求助]请教怎样改这个程序使它运行时间缩短一下
#include<stdio.h>
int main()
{
    int a,b,c;
    for(;scanf("%d %d",&a,&b)!=EOF;)
    {   c=a*b;
        if(a==0&&b!=0)
             printf("%d %d\n",b,a);
        else if(a!=0&&b==0)
             printf("%d %d\n",a,b);
        else
        {
            while(a!=b)
                  {if(a>b)
                    a=a-b;
                  if(a<b)
                    b=b-a;}
                printf("%d %d\n",a,c/a);
        }
    }
}
2014-10-19 12:23
erty1001
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:331
专家分:1433
注 册:2014-8-31
收藏
得分:0 
简单说说:
     if(a*b == 0)
           {printf("%d 0\n",a+b);continue;}
     c=a*b;
Loop_next:
     if(a>b) {a-=b;goto Loop_next;}
     if(b>a) {b-=a;goto Loop_next;}
     printf("%d %d\n",a,c/a);
2014-10-19 12:39
吐歌
Rank: 2
等 级:论坛游民
帖 子:43
专家分:19
注 册:2014-10-19
收藏
得分:0 
thank you

||||||||||||^_^COMEONFORGOODLIFE^_^||||||||||||
2014-10-19 12:43
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
简单说说:

就是求个最大公约数和最小公倍数,只是把while换成goto省不了多少时间。

楼主不知从哪学的更相减损术,这种算法不多见。相比而言辗转相除法应该更常见也更有效,怎么就没用呢?

演示一下:
程序代码:
#include <stdio.h>
int main()
{
    int a, b, c, r;
    for(; scanf("%d%d", &a, &b) != EOF; printf("%d %d\n", b, c / b))
    for(b = (c = a * b) ? b : a + b; r = a % b; a = b, b = r);
    return 0;
}

重剑无锋,大巧不工
2014-10-20 16:20
快速回复:[求助]请教怎样改这个程序使它运行时间缩短一下
数据加载中...
 
   



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

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