公因数和二进制
关于求两个数的最大公因数,以下是我列出的两种方法:
迭代法:
int gcd(int a, int b) {
while (b!= 0) {
int temp = b;
b = a % b;
a = temp;
}
return a;
}
递归法:
int gcd(int a, int b) {
if (b == 0) return a;
return gcd(b, a % b);
}
可以看出递归法更简洁,且包含了b=0的情况,但可能时间复杂度比迭代法更大
计算二进制中1的个数:
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int num = 0;
while (n) {
n &= (n - 1);
num++;
}
cout << num << endl;
return 0;
}
输入一个数,对于循环内部每次执行这个操作,都会将 n的二进制表示中最右边的 1 变为 0,同时更新 n 的值。然后将1的个数计入num。