求斐波拉契序列和回文数

# include <stdio.h>
/*
	2014年8月5日14:34:10	
	目的:
	   掌握斐波拉契序列	
*/
int main(void)
{
	int n;//序列中的第几个数
	int n1, n2, n3;//斐波拉契序列中的3个连续数

	n1 = 1;//序列中第一个数初始值
	n2 = 2;//序列中第二个数初始值

	printf(" 请输入你要求的序列");
	scanf("%d", &n);//接受用户输入

/*
试数分析:
	当n = 1时, n3 = 1;
	当n = 2时, n3 = 2; 这个时候才有2个前置数字相加。
	当n = 3时, n3 = n1 + n2; n1 n2 初始值为1 和 2, 1 + 2 = 3, 将n2的值赋给n1,将n3的值赋给n2,n1 = 2, n2 = 3.
	当n = 4时, n3 = n1 + n2 = 3 + 2 = 5; n1 = n2 = 3, n2 = n3 = 5;
	当n = 5时, n3 = n1 + n2 = 3 + 5 = 8; n1 = n2 = 5, n2 = n3 = 8;
	.......

  发现规律了,要想确定n3,必须确定n1和n2,先确定n1,他就是前一次循环的n2,
  而n2就是前一轮循环的n3的值。只要确定这2个数,就可以求出下一轮n3的值。
  不断重复
 */
	if (1 == n)
		n3 = 1;
	else if (2 == n)
		n3 = 2;
	else
	{
	  for (int i = 3; i <= n; i++)
	  {
		n3 = n1 + n2;
		n1 = n2;
		n2 = n3;
	  }
	}

	printf("n3 = %d\n", n3);

	return 0;
}
/*
当n = 5的时候
	在Vc++ 6.0中的输出结果是:
-------------------------------------
请输入你要求的序列5
n3 = 8
-------------------------------------
	总结: 
		1.斐波拉契序列除开始2个数字,(因为无法满足求第3个数字的值),之后都是规律来求的
		2.后面都是不断重复给这3个数赋值的过程。
		3.要求n3,必须知道n1,n2吧,而n1, n2 不就是上一轮的n2,n3么,
		  想通这一点之后,斐波拉契序列就完全没难度了。
 */




# include <stdio.h>
//回文数形式  如: 121  12321 1234321   1331  
//反过来数字不变

// 2014年8月5日13:08:03

//设计程序判断一个数是不是回文数
int main(void)
{
	int val; // 假如用val存放待判断的数字
	int sum = 0;//反过来的那个数
	int m;

	printf(" 请输入你需要判断的数字");
	scanf("%d", &val);

	m = val;
/*
试数分析:
		m = 1234, int sum = sum * 10 + 1234 % 10 = 4, m = 123;
		m = 123, int sum = 4 * 10 + 123 % 10 = 43, m = 12;
		m = 12, int sum = 43 * 10 + 12 % 10 = 432 , m = 1;
		m = 1, int sum = 432 * 10 + 1 % 10 = 4321, m = 0;
		m = 0 退出while循环
*/
	while(m)
	{
		sum = sum * 10 + m % 10;
		m /=10;
	}

	if(sum == val)//如果反过来的数字和原来一样,就YES,否则 NO
		printf("YES\n");
	else				
		printf("NO\n");

	return 0;
}

/*
	在Vc++ 6.0中的输出结果是:
-----------------------------------
请输入你需要判断的数字12321
YES
-----------------------------------
-----------------------------------
请输入你需要判断的数字123
NO
-----------------------------------
	总结:
		sum = sum * 10 + m % 10;
		m /=10;

	1.我们要知道一个十进制的数字对10取模的作用:可以拿到它的个数位的数字
	2.一个int类型十进制数除以10之后再乘以10,就会把那个数个位数丢掉,(因为那部分成为了小数)
	 m每次循环除以10,每次都把个位数丢弃,sum每次通过m取模拿到这个数不同时期各位数数。然后X10
	 因为最先拿到的个位数字X10次数是最多的,它也是sum的最高位数字。
	3.不断重复此过程 ,直到m = 0,退出循环,这样这个数字就反转了,再和原来数字作比较,如果反转之后的
	数字和原来的数字一样大,就表示这个数是回文数,否则,就不是。
	

*/


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值