不完美的期待——每日学习分享Day2

今天的我又学会了什么呢?
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;
}

猜你喜欢

转载自blog.csdn.net/weixin_44566432/article/details/87898511
今日推荐