怎样用C语言编写一个程序将输入的十进制数转化成16进制?

求二进制和8进制我已经做出来了,但是转换16进制要将10--15变成A--F,就在这里卡了壳,肯请各位大虾不吝赐教.请将关键代码奉上,谢谢.谢谢各位大哥了,按照我的思路应... 求二进制和8进制我已经做出来了,但是转换16进制要将10--15变成A--F,就在这里卡了壳,肯请各位大虾不吝赐教.请将关键代码奉上,谢谢.
谢谢各位大哥了,按照我的思路应该是这样:现丑了
{
int i=0,n=0;
char a[10];
for(n=0;n<10,num>0;n++)
{
a[n]=num%16+48;
num=num/16;
}
if(n==10||num<0)
{
printf("\n你输入的数字过大或者有错误.\n\n");
}
else
{
for(i=0;i<n;i++)
{
if(a[i]>57)
a[i]=fin[i]+7;
}
printf("转换后的数值是:");
for(n--;n>=0;n--)
printf("%c",fin[n]);
展开
 我来答
alawing
2007-03-08 · TA获得超过751个赞
知道答主
回答量:88
采纳率:0%
帮助的人:0
展开全部
你可以设置一个字符串数组
char HEX[16] = {'0', '1', '2', 3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'}

以后你得出的数字,比如余数y是10,那么HEX[y]打印出来就是A了

例子(现写的)

int now;
int res[100];//答案
int c = 0;//位数

输入到now;
while (now > 0)
{
res[c] = now % 16;
now = now / 16;
c++;
}

输出是:
for (i = 0; i < c; i++)
{
输出 HEX[res[i]];
}

算法的精髓都给你啦,好好理解吧
/**********************************************

**************** 补充 *****************

**********************************************/

改你的代码

#include "stdio.h"
void main()
{
char HEX[16] = {'0', '1', '2', 3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'}; //<----------------这里加了
int num;
printf("请输入一个十进制整数:");
scanf("%d",&num);

int a[10]; //<----------------这里改了
int i=0;
int yushu;
while(num>0)
{
yushu=num%16;
a[i]=yushu;
num=num/16;
i++;/*关键的就在这里,这后面书上写的要用SWITCH,但是我用不好,请各位大虾指教*/

}

printf("转化为十六进制的数为:");
for(;i>=0;i--)//倒序输出
{
printf("%c",HEX[a[i]]); //<----------------这里改了

}
printf("\n");
}
百度网友af60faf09
2007-03-07 · TA获得超过1636个赞
知道大有可为答主
回答量:774
采纳率:0%
帮助的人:918万
展开全部
#include<iostream.h>
#include<math.h>

void f1(int m, int n) {
if(m) { f1(m/n,n);
if(n<10) cout<<m%n;
else m%n>=10? cout<<char(m%n-10+'A') : cout<<m%n;
}
}

void f2(double m, int n) {
while(m) { if(n<10) cout<<int(m*n);
else m*n>=10? cout<<char(int(m*n)-10+'A') : cout<<int(m*n);
m = m*n - int(m*n);
}
}

void f(double m, int n) {
f1(m, n);
if(int(m) == m) return;
cout<<'.';
m -= int(m);
f2(m, n);
}

void f10(char c[], double m) {
cout<<' '<<c<<" 转换成"<< 2<<"进制 = "; f(m, 2); cout<<endl;
cout<<' '<<c<<" 转换成"<< 8<<"进制 = "; f(m, 8); cout<<endl;
cout<<' '<<c<<" 转换成"<<16<<"进制 = "; f(m,16); cout<<endl;
}

double fn_10(char c[], int n) {
char z[100];
int i = 0, j;
double b = 0;
cout<<' '<<c<<" 转换成10进制 = ";
while(*c != '.' && *c != '\0') z[i++] = *c++;
i--;
if(*c == '\0') c--;
for(j = 0; j <= i; j++)
if(z[j] < 65) b += (z[j]-48) * pow(n,i-j);
else b += (z[j]-55) * pow(n,i-j);
for(c++, j = -1; *c != '\0' ; c++, j--)
if(*c < 65) b += (*c-48) * pow(n,j);
else b += (*c-55) * pow(n,j);
cout<<b<<endl;
return b;
}

void main() {
cout<<" 进制转换\n";
char c[100];
int n;
cout<<"\n 输入一数与它的进制: ";
cin>>c>>n;
cout<<endl;
f10(c, fn_10(c,n));
}

参考资料: http://zhidao.baidu.com/question/19463628.html

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
4nil
2007-03-07 · TA获得超过140个赞
知道答主
回答量:51
采纳率:0%
帮助的人:32.2万
展开全部
long n;
scanf("%ld",&n);
printf("%x",n);

是不是这样呵呵。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式