菜鸟14:分解质因数
1.scanf的使用:(“%d”,&n) 括号里不能出现其他的文字
#include<stdio.h>
int main(){
int n=1;
int k=2;
printf("请输入数字");
scanf("%d",&n);
printf("%d=",n);
for(k=2;k<=n;k++){ //分解质因数应该从最小的质数2开始算起,然后依次递增
while(n%k==0){ //如果能被整除就让n变成除后的数
n=n/k;
printf("%d",k);
if(n!=1){ //用来判断要不要加*
printf("*");
}
}
}
}
菜鸟15 (表达式1)?表达式2:表达式3 三目运算符
意思是,如果表达式1为真,整体就会为2的值,如果为假,就会为3的值
进阶用法:表达式3里继续使用三目运算符
比如:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示
就应该写为grade=(score>=90)?'A':((score)>=60?'B':'C'
菜鸟16 最大公约数和最小公倍数
最大公约数
#include<stdio.h>
int main(){
int m,n,i,k;
int min,max;
int a=1;
int b=1;
printf("请输入两个整数:");
scanf("%d %d",&m,&n);
if(m<n) //这部分是为了判断两个数谁大谁小,从而判断出
// i应该最大为谁
{
min=m;
max=n;
}else if(m>n)
{
min=n;
max=m;
}
for(i=2;i<min;i++){ //这段就是一个一个找数字互相除 求得最小公约数
while(m%i==0&&n%i==0){
n/=i;
m/=i;
a*=i; //用a储存公约数
}
}
if(a=1){
printf("没有最大公约数");
}else if(a!=1){
printf("最大公约数是:%d",a);
}
}
ai的化简:
#include <stdio.h>
int main() {
int m, n, i;
printf("请输入两个整数:");
scanf("%d %d", &m, &n);
for(i = 2; i <= m && i <= n; i++) {
while(m % i == 0 && n % i == 0) {
m /= i;
n /= i;
}
}
if(m == 1 && n == 1)
printf("最大公约数是:%d", i-1);
else
printf("没有最大公约数");
return 0;
}
主要改进:
-
使用一个变量i直接表示可能的公约数,不需要额外的a,b变量。
-
for循环条件改为i <= m && i <= n,这样可以避免出现最小数为1时的死循环。
-
直接判断m,n是否同时为1来判断是否有最大公约数。
-
返回0语句。
最小公倍数:
1.while(1),可直接使用,是个死循环,需要break配套
#include<stdio.h>
int main(){
int m,n,i;
printf("请输入两个整数:");
scanf("%d %d",&m,&n);
if(m<n){
i=n;
}else if(m>n){
i=m;
}
while(1){
if(i%m==0&&i%n==0){ //计算最小公倍数
printf("最小公倍数是%d",i);
break;
}
i++;
}
}