编写:让一个数是奇数的位重新组成一个数

编写:让一个数是奇数的位重新组成一个数

#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.基本编完算法之后,还要注意结构是否正确,是否有语句放错位置,花括号范围不合适的情况。另外,还要注意所用到的变量是否都定义好了,使用前是否赋初值了。变量随用随写,在循环和核心算法设计完之前是无法确定变量的个数的。

写给自己。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值