标题:yushui come in!
取消只看楼主
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
 问题点数:0 回复次数:2 
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-03-12 22:09
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
得分:0 
不错,能想到这样的问题~~
我现在是先弄乘法的

淘宝杜琨
2007-03-12 22:46
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
得分:0 
是的~~任何数模1都等于0

淘宝杜琨
2007-03-13 08:00



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-123901-1-1.html




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

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