问题如下:
【要求】输入一个整数,如果是负数的话,忽略其符号,输出该数各位数字之积.
【示例】输入66,输出36;输入-96,输出54.
思路如下:
【解析】每次除以10取余数(即取最后一位数),并累乘到一个变量上,再用商更新原来保存输入整数值的变量.
【关键】何时终止取数?当商为0.
【易错】当从键盘输入多个0时应做特殊处理,例如输入00000时应直接返回0.
代码实现:
#include <stdio.h>
#include <stdlib.h> //abs()函数调用在此头文件中
long foo(int x) { //多个整数相乘的积增长得很快,使用int类型可能会导致溢出,故使用long类型
x = abs(x); //如果是负数则返回其绝对值
int m,n;
m = x;
n = 0;
if(m == 0) {
return 1;
} else {
n = m % 10; //n为余数
m /= 10; //m为商
return foo(m) * n; //递归调用
}
}
int main(void) {
int x = 0;
long ret = 0;
printf("请输入一个整数:\n");
scanf("%d",&x);
if(x == 0) { //输入为0直接返回0
ret = 0;
} else {
ret = foo(x);
}
printf("%ld\n",ret);
return 0;
}
运行结果: