是这样的吧,输入167后,进入sub函数后循环,第一轮,s=1,那么运算后s=1*7=7,n=16;第二轮s=7*6=42,n=1;第三轮s=42*1=42,n=0,退出循环,那么又return s,即n=s=sub(n)=42,于是输出n就是42了。
对的。。输入167后,调用到sub 中。执行了n%10得到 s=7 执行n/10得到 N=16 while(16)为真 ,返回SUB函数,再次执行 n%10 得到6 s=7*6=42 在执行n/10 得到n=1,while (1)为真,再次返回,s=7*6*1=42 n/10=0 while(0)为假了。所以不返回了。执行最后输出。得到S=42
s*=n%10->s=s*(n%10)///s=1*(167%10)=7;
n/=10->n=n/10///n=167/10=16;
然后一直循环这么算
下一循环结果 s=42;n=1
再下个循环就是s=42,n=0;
这时while(n)就失效跳出循环返回s=42
题意是当n=0时跳出循环,但n=n/10,当n=167时,则会有3次循环。
第一次:s=7;
第二次:s=7*(16%10)=7*6=42;
第三次:s=42*(1%10)=42*1=42;
所以结果为:42.
(%是求两个数余数的运算符)
这样的输入167
第一次s*=n%10、
结果s = 7,n=16
第二次s*=n%10
结果s = 42 n=1
第三次 s*=n%10
结果s = 42, n=0