| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付学习型 ASP/PHP/ASP.NET 主机 30元/年
高端软件开发 = 年薪十万不是梦赛孚耐:软件保护加密专家身份认证令牌USB KEY 
共有 245 人关注过本帖
标题:yushui come in!
收藏  订阅  推荐  打印 
神vLinux飘飘
Rank: 12Rank: 12Rank: 12
等级:贵宾
威望:87
帖子:6085
积分:61226
注册:2004-7-17
yushui come in!

//
// File: test.cc
// Author: vlinux
// 题目:输入一个数 把它分成两个数 看着两个数的最大公约数和最小公倍数之比为1:7 求着两个数
// Created on 2007年3月12日, 下午9:19
//

#include <stdlib.h>
#include <iostream.h>

//
//
//

//求最大公约数
inline int getGCD( int x, int y ) {
int i, j, t;
if (x == 0 ) return y;
if (y == 0 ) return x;
for (i = 0 ; 0 == (x & 1 );x >>= 1 , ++ i);
for (j = 0 ; 0 == (y & 1 );y >>= 1 , ++ j);
if (j < i) i = j;
for (;;) {
if (x < y) t = y, y = x, x = t;
if ( 0 == (x -= y)) return y << i;
for (; 0 == (x & 1 );x >>= 1 );
}
}


//求最小公倍数
inline int getLCM( int x, int y, int gcd ) {
return x*y/gcd;
}




int main(int argc, char** argv) {

int num;
//cout << "Input a integer\n";
//cin >> num;
for( num = 1; num<=1000; num++ ) {
int i = 1;
do {
if( num%i == 0 ) { //如果i能够被num整除,说明 i * num/i = num
//即:num可以被拆分成 i与num/i相乘
int a = i;
int b = num/i;
int gcd = getGCD( a, b ); //取得最大公约数
int lcm = getLCM( a, b, gcd ); //取得最小公倍数
if( gcd*7==lcm ) {
cout << "num=" << num << " a=" << a << " b=" << b << " gcd=" << gcd << " lcm=" << lcm << endl;
}
}

} while( i++<=num/2+1 );
}
return 0;
}


搜索更多相关主题的帖子: come  yushui  int  include  最大公约数  
2007-3-12 22:09
moonwalker
Rank: 4
等级:高级会员
威望:1
帖子:907
积分:9698
注册:2007-3-2

题目有点不明确,1个数怎么拆成2个数?C=A×B? or C=A+B?
没有细看你的程序

“视频教程网”免费提供教学资源
C不限制你的自由!
条件是自己承担滥用自由的恶果!
2007-3-12 22:14
神vLinux飘飘
Rank: 12Rank: 12Rank: 12
等级:贵宾
威望:87
帖子:6085
积分:61226
注册:2004-7-17

不错,能想到这样的问题~~
我现在是先弄乘法的

泛出微微的蓝色的光,像有生命般涌动着,闪烁着,平滑而优美,达到了机械和美学结合的最高境界,向一件艺术品一样,默默的展示着,寂寞而孤傲,只有宇宙才能证实它的存在,只有永恒可以于它并存
2007-3-12 22:46
高达
Rank: 3Rank: 3
等级:中级会员
威望:1
帖子:261
积分:2722
注册:2006-10-27

8是不是 可以分 2个0....

哎 时间....................
2007-3-12 22:48
nuciewth
Rank: 12Rank: 12Rank: 12
来自:我爱龙龙
等级:版主
威望:93
帖子:9521
积分:95068
注册:2006-5-23

亦或是C=AB;

不过按道理应该是C=A+B这种.

倚天照海花无数,流水高山心自知。
2007-3-12 22:59
高达
Rank: 3Rank: 3
等级:中级会员
威望:1
帖子:261
积分:2722
注册:2006-10-27

int main(int argc, char** argv) {

int num;
//cout << "Input a integer\n";
//cin >> num;
for( num = 1; num<=1000; num++ ) {
int i = 1;
do {
if( num%i == 0 ) { //如果i能够被num整除,说明 i * num/i = num
//即:num可以被拆分成 i与num/i相乘 好象任何数模1都等于0吧..

int a = i;
int b = num/i;
int gcd = getGCD( a, b ); //取得最大公约数
int lcm = getLCM( a, b, gcd ); //取得最小公倍数
if( gcd*7==lcm ) {
cout << "num=" << num << " a=" << a << " b=" << b << " gcd=" << gcd << " lcm=" << lcm << endl;
}
}

} while( i++<=num/2+1 );
}
return 0;
}

哎 时间....................
2007-3-12 23:01
神vLinux飘飘
Rank: 12Rank: 12Rank: 12
等级:贵宾
威望:87
帖子:6085
积分:61226
注册:2004-7-17

是的~~任何数模1都等于0

泛出微微的蓝色的光,像有生命般涌动着,闪烁着,平滑而优美,达到了机械和美学结合的最高境界,向一件艺术品一样,默默的展示着,寂寞而孤傲,只有宇宙才能证实它的存在,只有永恒可以于它并存
2007-3-13 08:00
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.057914 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved