编写:让一个数是奇数的位重新组成一个数
#include<stdio.h>
int main()
{
int i = 1, s = 0;
while (n)
{
if (n % 2)
{
s = s + i * (n % 10);//n%10作用是把当前的最后一位提取出来
//i*(n%10)的作用是把这一位在新数中的
//实际值算出来,根据提取的顺序,
//第1,2,3次提取的数在新数中所占的
//分别为个,十,百位。由i来控制
//故下方还要有一个i的赋值语句
//s=s+()的作用是把()内的数累加
//到s上
i *= 10;//为下一次循环作准备,故这里应放在上个语句的下面,
//且i的初值为1
}
n /= 10;//既作为循环控制语句,也起到把每一次判断完之后的最后一位去掉的作用
}
return s;
}
核心算法:取末,乘权,再相加
整体思路:
1.需要检查各位的奇偶性,故循环次数应该等于数的位数,可以利用n/=10来控制循环次数,使几位数恰好循环几次。然后以n=0作为循环结束条件。
注意:往往循环控制语句比循环结束条件更重要,应该确定好循环控制语句后再据此确定循环结束条件。
2.提取末尾的方法是n%10,但想要将提取的一个个数组成数字,需要将他们乘上各自的权重以后再相加。且与循环的对应关系为:第1,2,3次符合条件的数应分别乘上1,10,100。
想要做到每次乘的数是10的n-1次方,就要在该语句下方加一个i*=10。且要在if语句之内,以保证每次条件符合才让i10,防止出现i的值和对应的位数不匹配的情况。
3.现在已经求出了新数中各位数字并乘了他们对应的权重,剩下的只需要把他们相加。用s=s+()的形式,()内的数在每次循环时都会加到s上,即把每次想得到的数据累加起来。
4.基本语句已经全部处理好了,最后要留意一下语句之间的顺序和所处结构的问题。上面已经说过一点,i=10要放在if内,防止权重与位数不匹配。另外,还要注意累加语句和变i语句的顺序,根据第一次循环即可定下初值和语句顺序。
模板总结: 编程,阅读的四大步
1.用到循环时,要先根据题目要求,确定好循环的次数,给出循环控制语句,进而确定出初始条件。
2.阅读程序时,善于利用循环,找出有关变量对应的所有语句和信息,分析出这些语句的综合作用,然后用人类的思路去解出答案,而不要每一步都按程序走,这样极易出错而且很麻烦。
3.编写核心算法时,要从内向外,把最初始最核心的部分找出来,再根据算法往上套语句,而不是一步就直接写出完整的一个语句。
4.基本编完算法之后,还要注意结构是否正确,是否有语句放错位置,花括号范围不合适的情况。另外,还要注意所用到的变量是否都定义好了,使用前是否赋初值了。变量随用随写,在循环和核心算法设计完之前是无法确定变量的个数的。
写给自己。