int n,s=0; scanf("%d",&n); while(n) { s*=10;
intn,s=0;scanf("%d",&n);while(n){s*=10;s+=n%10;n/=10;}printf("%d",s);请问下各位C语言大神,这个是求任...
int n,s=0;
scanf("%d",&n);
while(n)
{
s*=10;
s+=n%10;
n/=10;
}
printf("%d",s);
请问下各位C语言大神,这个是求任意整数的逆序数的算法,但我看了很久都没看懂,能替我分析一下吗? 展开
scanf("%d",&n);
while(n)
{
s*=10;
s+=n%10;
n/=10;
}
printf("%d",s);
请问下各位C语言大神,这个是求任意整数的逆序数的算法,但我看了很久都没看懂,能替我分析一下吗? 展开
2个回答
展开全部
这里涉及到2个算法,一个是分离整数的各个数位,另一个是累加
首先来说分离数位,比如 n = 12345
一个整数对10求余的结果是0到9,因此它是个位数
则n%10得到个位数5
如何求十位数呢?如果把5去掉,让n=1234,再求余不就可以了吗?
因此有n = n/10;
如此循环,依次得到5,4,3,2,1
如何把它们组合成一个整数呢?
第一次分离出了5,给5添一个0,得到50
第二次分离出了4,50+4=54,再添一个0,得到540
第三次分离出了3,540+3 = 543,再添一个0,得到5430
……如此继续
首先来说分离数位,比如 n = 12345
一个整数对10求余的结果是0到9,因此它是个位数
则n%10得到个位数5
如何求十位数呢?如果把5去掉,让n=1234,再求余不就可以了吗?
因此有n = n/10;
如此循环,依次得到5,4,3,2,1
如何把它们组合成一个整数呢?
第一次分离出了5,给5添一个0,得到50
第二次分离出了4,50+4=54,再添一个0,得到540
第三次分离出了3,540+3 = 543,再添一个0,得到5430
……如此继续
展开全部
s *= 10 s=4,进行第二轮s*10 = 40,就是把数字往左移
s+ = n%10 这是最后一位很容易理解吧,1234的话就是4,s初始化时0。第二轮40+3=43, 然后是43*10=430+2=432
n/10 把1234的最后一位去掉 123,返回第一行
第一轮
s = s*10 s=0
s = 1234%10 = 4
n = n/10 = 123
第二轮
s = s*10 = 4*10
s = 123%10 = 3+40=43
n=n/10=12
第三轮
s = s*10 = 430
s = 12%10 = 2+430=432
n=n/10=1
第四轮
s = s*10 = 432*10=4320
s = 1%10 = 1+4320 = 4321
s = 1/10=0
结束
s=4321
s+ = n%10 这是最后一位很容易理解吧,1234的话就是4,s初始化时0。第二轮40+3=43, 然后是43*10=430+2=432
n/10 把1234的最后一位去掉 123,返回第一行
第一轮
s = s*10 s=0
s = 1234%10 = 4
n = n/10 = 123
第二轮
s = s*10 = 4*10
s = 123%10 = 3+40=43
n=n/10=12
第三轮
s = s*10 = 430
s = 12%10 = 2+430=432
n=n/10=1
第四轮
s = s*10 = 432*10=4320
s = 1%10 = 1+4320 = 4321
s = 1/10=0
结束
s=4321
追问
能不能再详细点。。
追答
abcde = e*10000+d*1000+c*100+b*10+a*1
.
.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询