题目:将一个无符号整数转换成为任意进制(2到16之间)
思路:用数组完成
定义数组及其它。
由键盘输入所要转换的整数 num ;然后输入权 sig (2<= sig <= 16),不在此范围重新来,由do-while控制。
然后将取的余数存入数组中。
从数组倒着打印出最后答案。
有很多不完善的地方,希望可以改进!希望早点把指针掌握!
编绎软件:vc++6.0
程序:
#include <stdio.h>
#include <conio.h>
void main()
{
int temp[100]; //定义数组
int num,sig,i=0,k; //num为要求的整数,sig为权
printf("Please input the num you want to translate: ");
scanf("%d",&num);
do
{
printf("please input significance between 2 and 16: ");
scanf("%d",&sig);
printf("/nYou input the significance: %d/n/n",sig);
}while(sig<2 || sig>16); //控制权在2-16之间
k=num; //将num赋给k,下面的模以k计算
do
{
temp[i++]=k%sig;
k = k/sig;
}while(k != 0); //将k对权取余,存入数组
printf("%d(%d)= ",num,sig);
do
{
if(temp[i-1]<10)
{
printf("%d",temp[i-1]);
}
else if(temp[i-1]>=10)
{
if(temp[i-1] == 10) printf("A");
else if(temp[i-1] == 11) printf("B");
else if(temp[i-1] == 12) printf("C");
else if(temp[i-1] == 13) printf("D");
else if(temp[i-1] == 14) printf("E");
else if(temp[i-1] == 15) printf("F");
}
i--;
}while(i>0); //倒着输入出数组,如果>10,则输出字母
printf("/n");
getch();
}
其它这段程序:
do
{
temp[i++]=k%sig;
k = k/sig;
}while(k != 0); //将k对权取余,存入数组
为什么不能改成:
for(k=num;k<sig;k/=sig)
{
temp[i++]=k%sig;
}
百思不得其解!