1. 求最大公约数
1)递归
int gcd(int a,int d){
return b?gcd(b,a%b):a;
}
测试:
#include<bits/stdc++.h>
using namespace std;
int gcd(int a,int b){
return b?gcd(b,a%b):a;
}
int main(void){
cout<<gcd(15,20);
return 0;
}
结果:5(验证成功)
2)辗转相除法
int gcd(int a,int b){
while(b){
int c=b;
b=a%b;
a=c;
}
return a;
}
2. 求最小公倍数
思路:求a和b的最小公倍数也就是求一个数x,使得x%a==0&&x%b==0,且x是最小满足的值。
int lcm(int a,int b){
for(int i=1;;i++){
if(a*i%b==0)
return a*i;
}
}
测试:
#include<bits/stdc++.h>
using namespace std;
int lcm(int a,int b){
for(int i=1;;i++){
if(a*i%b==0)
return a*i;
}
}
int main(void){
cout<<lcm(15,20);
return 0;
}
结果:60(验证成功)
3. 求因子
也就是求一个数能被那些数整除
#include<bits/stdc++.h>
using namespace std;
int main(void){
int n;
cin>>n; //求n所有的因子
cout<<"数"<<n<<"的公因子有:";
for(int i=1;i<=sqrt(n);i++){
if(n%i==0){
cout<<i<<" ";
if(n/i!=i)
cout<<n/i<<" ";
}
}
return 0;
}
使用sqrt()开平方根能有效提升求因子算法效率。
4. 输入带空格的字符串---getline()
#include<bits/stdc++.h>
using namespace std;
int main(void){
string s;
getline(cin,s);
cout<<s;
}
结果: