参考答案:
(1) m % 10,或其等价表示 (2) k-1-i
(3) !isPalm(n),或isPalm(n)!=1,或isPalm(n)=0 (4)a (5) n+a
详细解析:
本题考查C程序设计的基本能力。
函数isPalm{long m)的功能是判断m是否为回文数,其方法是先将m的各位数字依次取出转换为对应的数字字符保存在数组str中,然后再判断str中的字符序列是否对称。
代码如下:
While(m>0){ /*从个位数开始逐个取出m的各位数字并存入字符数组str*/
str[k++]=m%10+’0’;
m=m/10;
}
因此,空(1)处应填入“m%10”,将数m的个位数字取出。以上while循环结束时,k的值即为m取初始值时的位数。
若需判断str[0]、str[1]…、str[k-1]中的k个数字字符序列是否对称,则应依次比较str[0]与str[k-1], str[1]与str[k-2]、...str[k/2-1]与str[k/2+l]是否相等,若都相等,则是回文数:若其中有一处不等,则不是回文数。代码如下:
For (i=0; i
因此,空(2)处应填入“k-1-i”。
根据题目描述,从最初输入的数开始,直到得到一个回文数时结束,因此对于数n,调用函数is Palm(n),根据返回值确定n是否为一个回文数,空(3)处应填入“lispalm(n)”。
为了求一个数t的反序数,可从其个位数字开始,依次取出其各位数字并进行组合。下面以t=345举例说明通过整除取余“%”、整除“/”取出各位数字并组合出543的过程。
初始时:a=0 t=345
下一步:345%10=>5 a*10+5=>a=5 t/10=345/10=>t=34
下一步:34%10=>4 a*10+4=>a=54 t/10=34/10=>t=3
下一步:3%10=>3 a*10+3=>a=543 t/10=3/10=>t=0
因此,可知空(4)处应填入“a”。
最后数n与其反序数a相加得到新的数,继续产生回文数的过程。空(5)处应填入“n+a”。