C语言入门笔记
循环控制 21.01.03
注重对循环终止的判定,即break,continue的使用,以及嵌套循环的逐层break
求最大公约数
输入两数字取最大公约数
枚举法
对更小值做for取公约数直到 i<=min ,判断条件a%i==b%i ,用ret接受最大公约数即可
#include<stdio.h>
int main(){
int a,b;
int min;
scanf("%d %d",&a,&b);
if(a>b) {
min=b;
}
else {
min=a;
}
int ret=0;
for(int i=1;i<=min;i++){
if(a%i==0&&b%i==0){
ret=i;
}
}
printf("最大公约数为%d",ret);
return 0;
}
辗转相除法
a,b两数相除,余数给t,b值给a,t值给b,再相除求余给t,以此类推,当b为0时,a为最大公约数
#include<stdio.h>
int main(){
int a,b,t;
scanf("%d %d",&a,&b);
while(b!=0){
t=a%b;
a=b;
b=t;
}
printf("%d",a);
}
正序输出
用mask来取输入数字的位数,入a=7777,则mask=1000。同位相除可取得该位数字。之后再循环1000,100,10,1来取得各位数字,若mask=1则不输出空格。
#include<stdio.h>
int main(){
int a,t;
int mask=1;
scanf("%d",&a);
//a=700;
t=a;
while(t>9){
t/=10;
mask*=10;
}
int number=0;
while(mask>0){
number=a/mask;
if(mask!=1){
printf("%d ",number);
}
else{
printf("%d",number);
}
a=a%mask;
mask/=10;
}
return 0;
}