# 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,退出循环,这样这个数字就反转了,再和原来数字作比较,如果反转之后的
数字和原来的数字一样大,就表示这个数是回文数,否则,就不是。
*/