用C或者C++编程,输入一个10进制正整数,然后输出它所对应的八进制、十六进制数。(不能直接用%0和%x来输出

不能直接用%0和%x来输出
2024-11-25 01:12:05
推荐回答(5个)
回答1:

现在提供一个可以进行十进制到二进制、十六进制、八进制的转换程序,同时对于输入的十进制数没有要求,可以是正数、负数、整数和小数等都可以的,同时可以进行十进制到二进制到十六进制的转换的,源程序如下:
#include
#include
void main()
{
int i=0,n,j,a[20],b[20],k,c=0;
double m,x,d;
printf("请输入需要转换的数:");
scanf("%lf",&x);
printf("请输入要转换成的进制(1 scanf("%d",&n);
if(x<0)
m=fabs(x);
else
m=x;
k=(int)m;//强制类型转换,可以使用k=(int)m;代替,从而更加的一目了然
while(k)//判定需要转换的数是否变为0
{
a[i++]=k%n;//取余,进行进制转换,但是顺序与正确值相反
k/=n;//转换一位之后进行相应的变化
}
if(m!=(int)m)//选择性计算,如果是整数就不用进行这一步的计算了,这样可以节约程序的运行时间
{
d=m-(int)m;//取小数部分
while(d!=0)
{
b[c]=(int)(d*n);//算法为×N取整
d=d*n-b[c];
c++;
if(c>=10)
break;//主要是控制小数后面万一出现无限小数的时候好跳出循环以免出现死循环
}
}
printf("转换结果为:");
if(x<0)
printf("-");
for(j=i-1;j>=0;j--)//反序输出,大于10的数字进行相应的变化
{
if(a[j]==10)
printf("A");
else
if(a[j]==11)
printf("B");
else
if(a[j]==12)
printf("C");
else
if(a[j]==13)
printf("D");
else
if(a[j]==14)
printf("E");
else
if(a[j]==15)
printf("F");
else
printf("%d",a[j]);
}
if(m!=(int)m)//选择性输出,这样可以节约输出时间和程序的运行时间
{
printf(".");
for(j=0;j {
if(b[j]==10)
printf("A");
else
if(b[j]==11)
printf("B");
else
if(b[j]==12)
printf("C");
else
if(b[j]==13)
printf("D");
else
if(b[j]==14)
printf("E");
else
if(b[j]==15)
printf("F");
else
printf("%d",b[j]);
}
}
if(c>=10)//如果是无限小数则在后以省略号表示
printf("......");
printf("\n");//输出换行,以使程序的输出结果美观
}

回答2:

这个要自己写函数来转换 因为系统可以用格式化输出来输出 所以没必要自己写

回答3:

#include
#include
int main()
{
char ch[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}, output[20];
int input,temp,n,i=0;
cout<<"请输入你想要转换的十进制数:";
cin>>input;
cout<<"请输入要转换的进制(2<=n<=16):";
cin>>n;
input=fabs(input);
while(input)
{
temp=input%n;
input=input/n;
output[i++]=ch[temp];
}
output[i]='\0';
cout<<"转换为"<for(;i>=0;i--)
cout<cout<return 0;
}

回答4:

#include
#include
void main()
{
int num;
char str1[33],str2[33];
printf("十进制数:");
scanf("%d",&num);
itoa(num,str1,8);
itoa(num,str2,16);
printf("转化结果:\n八进制:%s, 十六进制:%s\n",str1,str2);
}

解题技巧: 用 itoa()和atoi() 两个库函数。

注:
1.itoa()函数有3个参数:第一个参数是要转换的数字,第二个参数是目标字符串,第三个参数是转移数字时所用的基数。在上例中,转换基数为2。2:十进制;10:十进制。

2.itoa(num, str, 2); 的作用是将num这个数以二进制形式的字符串形式存放在str指向的内存中。
如:itoa(10, str, 2);转化后str中字符串是“ 0001010”,10D=0001010B。
(后缀D、B分别代表十进制、二进制)

3.itoa(num, str, 10); 的作用是将num这个数以十进制形式的字符串形式存放在str指向的内存中。
如:itoa(10, str, 2);转化后str中字符串是“10”,10D = 10D。

4.使用itoa()函数时别忘记加头文件 #include

回答5:

自己求好了啊~