今天的我又学会了什么呢?
1、逻辑先后需理清
例如,水仙花数这一题,在变量的位置上放错了地方,应当将每个数的变量放在循环内,因为程序是从上往下运行的,运行到循环需要的变量要存在有效!否则,每一个代码块都正确就是不能正确运行成功。可见,逻辑思路还是需要好好理清的哟~加油!
分享例题:
打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数 本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
int i,j,k,num;
for (num = 100; num < 1000; num++){
i = num / 100; //在循环内部得到每一个数的每一位哦
j = (num - 100*i)/10;
k = (num - j*10 - i*100);
if (num == (i*i*i + j*j*j + k*k*k))
printf("%d\n",num);
}
return 0;
}
2、将正整数分解质因数
题目:将一个正整数分解质因数。例如:输入90,打印出90=233*5。
方法一:
分析:分解质因数,从最小的因数2开始,将每次整除过的整数继续执行形成循环,但在此进行分解时还是会从最小因数2开始。同时需要注意,for的条件有 i++,因此在重新命令时只需要 i = 1,最后在循环外打印出最小的因数。
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
int num, i;
scanf("%d",&num);
printf("%d = ",num);
for (i = 2; i < num; i++){
if ((num % i) == 0){
printf("%d *", i);
num = (num / i);
i = 1;
}
}
printf("%d",num);
return 0;
}
方法二:
复习内容:while循环、反向 **!**思维
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
int num, i;
scanf("%d",&num);
printf("%d = ",num);
for (i = 2; i < num; i++){
while((num % i) == 0){
printf("%d",i);
num = num / i;
if (num != 1)
printf("*");
}
}
return 0;
}