求0-7所能组成的奇数个数,c语言 为什么要sum s都等于4 为什么 s*=7 s*=8 求解释一下

如题所述

这个解法是对的,但是麻烦了。原题应该还有“数字位数不能超过8位”的限制。
先说一下各个变量的含义,方便你理解:j的含义是数字位数。比如j=3时,实际上是在考虑三位数;而循环中的s其实就是算对应的j时,0-7组成的j位数中奇数的个数。所以sum只需要把s全部累加就可以得出8位以内0-7组成的奇数个数了。
而为什么j的范围是2到8呢?因为j=1时,一位数奇数就只有四种可能(1,3,5,7)所以把s和sum初始化为4,就可以不用算j=1的情况了。
对于j=2的情况,考虑两位数的奇数。个位只有4种可能,这个已经存在s中了,十位因为不可以等于0,所以只有7种可能,于是s=4*7,这就是为什么if(j<=2) s*=7。而当j>2时,s中存放的是在上一次循环考虑的(j-1)位奇数的个数,所以在算j位奇数个数时只要在中间补一位就可以了,补的那一位有8种可能,这就是为什么s*=8。
循环中,sum还把s累加,于是就把答案算出来了。
哪里不懂还可以继续追问。
温馨提示:答案为网友推荐,仅供参考
相似回答