我是目标c的新手,我想知道是否有最大公因子的方法
例如 gcf()
所以你明白了
答案 0 :(得分:8)
没有开箱即用的功能。由于Objective-C是C的超集,因此您可以获取现有库或一组函数,并在必要时包含它。
基于http://www.idevelopment.info/data/Programming/data_structures/c/gcd/gcd.c,您可能会这样做:
// gcd.h
int gcd(int m, int n);
// gcd.c
int gcd(int m, int n) {
int t, r;
if (m < n) {
t = m;
m = n;
n = t;
}
r = m % n;
if (r == 0) {
return n;
} else {
return gcd(n, r);
}
}
每当您希望使用gcd
函数时,请包含该文件:
#import "gcd.h"
答案 1 :(得分:4)
没有内置方法,但Euclidean algorithm易于实现且效率很高。
The binary GCD algorithm可以稍微提高效率。此链接具有实现它的C代码。
答案 2 :(得分:3)
到目前为止,我遇到的最优雅的解决方案(当然是非递归的):
int gcd (int a, int b){
int c;
while ( a != 0 ) {
c = a; a = b%a; b = c;
}
return b;
}
答案 3 :(得分:0)
将damian86的答案放入Objective-C样式(对self
的引用假定一个对象的上下文,相应地修改,你可以将它作为一个类别等):
-(int)greatestCommonDivisorM:(int)m N:(int)n
{
int t, r;
if (m < n) {
t = m;
m = n;
n = t;
}
r = m % n;
if (r == 0) {
return n;
} else {
return [self greatestCommonDivisorM:n N:r];
}
}