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

不能直接用%0和%x来输出... 不能直接用%0和%x来输出 展开
 我来答
测绘二哈
2009-03-01 · TA获得超过2727个赞
知道小有建树答主
回答量:596
采纳率:0%
帮助的人:0
展开全部
现在提供一个可以进行十进制到二进制、十六进制、八进制的转换程序,同时对于输入的十进制数没有要求,可以是正数、负数、整数和小数等都可以的,同时可以进行十进制到二进制到十六进制的转换的,源程序如下:
#include<stdio.h>
#include<math.h>
void main()
{
int i=0,n,j,a[20],b[20],k,c=0;
double m,x,d;
printf("请输入需要转换的数:");
scanf("%lf",&x);
printf("请输入要转换成的进制(1<N<=16):");
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<c;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");//输出换行,以使程序的输出结果美观
}
百度网友ba5f5517e8f
2009-03-01 · 超过20用户采纳过TA的回答
知道答主
回答量:88
采纳率:0%
帮助的人:0
展开全部
这个要自己写函数来转换 因为系统可以用格式化输出来输出 所以没必要自己写
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友66ce6681f
推荐于2017-09-16 · TA获得超过240个赞
知道小有建树答主
回答量:291
采纳率:0%
帮助的人:252万
展开全部
#include<iostream.h>
#include<math.h>
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<<"转换为"<<n<<"进制后为:";
for(;i>=0;i--)
cout<<output[i];
cout<<endl;
return 0;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ziguowen
2009-03-01 · TA获得超过2723个赞
知道小有建树答主
回答量:785
采纳率:35%
帮助的人:336万
展开全部
#include<stdio.h>
#include<stdlib.h>
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<stdlib.h>
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
shaocl112102
2009-03-01 · TA获得超过342个赞
知道答主
回答量:496
采纳率:0%
帮助的人:0
展开全部
自己求好了啊~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式