早教吧 育儿知识 作业答案 考试题库 百科 知识分享

C的一段程序如果输入两位或两位以上的数(假设位数为n)把这个数的后n-1位输出例如输入123输出23..unsignedt,s=0,s1=1,p=0;t=m;while(t>10){if(t/10)p=t%10;s=s+p*s1;s1=s1*10;t=t/10;}returns;我承认这段程序

题目详情
C的一段程序 如果输入两位或两位以上的数(假设位数为n) 把这个数的后n-1位输出 例如输入123 输出23..
unsigned t,s=0,s1=1,p=0;
t=m;
while(t>10)
{
if(t/10)
p=t%10;
s=s+p*s1;
s1=s1*10;
t=t/10;
}
return s;
我承认 这段程序作为验证后是对的 但是我不明白为什么 请高手不要笑我啊 我只说出自己的想法 例如我输入123 它大于10对吧 进入if中 t/10是12 然后它除以10余2 把这个值给了p 然后s=2 这是我输入123的十位 之后就看不懂了 它给s扩大十倍后又让t除以10之后是怎么变成我想输出的23的呢 怎么都想不懂呜 .
▼优质解答
答案和解析
思路:
t=m(估计m你定义的是输入的那个数,拿123举例吧)
while(t>10),如果t100
if(123/10)即if(12),条件真
则执行下面的 p=t%10;p=123%10=3
s=3*1=3//这是各位数字
s1=10
t=t/10 (t=12)
-----------------------
if(12/10)为真
p=12%10=2
s=3+10*2
t=t/10=1
---------------------
循环结束
返回s结果23
p是每一位的数字,s1是位数的系数(十位10、百位100)
123=1*100+2*10+3*1(其中1、10、100就是s1的意义)
注意if(t/10)执行后t的值并没有改变