有关C++的一段程序

来源:百度知道 编辑:UC知道 时间:2024/07/08 21:29:25
我是C++的初学者,请多多指教~~
#include "iostream.h"
void main()
{
char b[17]="0123456789ABCDEF";
int i=0,h,n,c[10];long int m;
cin>>m>>h;
do
{
c[i++]=m%h;
}
while((m=m/h)!=0);
for(--i;i>=0;--i)
{
n=c[i];cout<<b[n];
}
cout<<endl;
}
分别输入100和8,程序的输出结果为什么是144?

当m=100,h=8时,
do
{
c[i++]=m%h;
}
while((m=m/h)!=0);
通过上述循环,得到c[0]=4,c[1]=4,c[2]=1;

for(--i;i>=0;--i)
{
n=c[i];cout<<b[n];
}
该循环中三个循环,
第一循环,n=c[2]=1,则b[1]=1;
第二循环,n=c[1]=4,则b[4]=4;
第三循环,n=c[0]=4,则b[4]=4;

所以输出来就是144咯!!!

for(--i;i>=0;--i)写错了吧

这段程序没有错误,实际是数制转换,输入100和8,意思是把100转换成8进制,输出出来;

do
{
c[i++]=m%h;
}
while((m=m/h)!=0);
100%8=4,c[0]=4 m=m/h=100/8=12
12%8=4,c[1]=4 m=12/8=1
1%8=1,c[2]=1 m=1/8=0 退出循环
for(--i;i>=0;--i)
没看懂

没错啊,因为c[0]=4,c[1]=4,c[2]=1,所以i递减时对应的n为1,4,4,对应b[1]、b[4]、b[4],即为144
至于i取3时,对应c[3]系统值为-858993460,无效