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

求二进制和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]);

你可以设置一个字符串数组
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");
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2007-03-07
#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

第2个回答  2007-03-07
long n;
scanf("%ld",&n);
printf("%x",n);

是不是这样呵呵。

怎样用C语言编写一个程序将输入的十进制数转化成16进制?
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 ...

C语言编程:怎么把一个十进制数转换成为一个十六进制数?
第一种:用来糊弄老师的,输入一个数采用16进制格式输出 include <stdio.h> int main(){ int num = 0;scanf("%d", &num);printf("%x", num);return 0;} 第二种:include <stdio.h> include <string.h> char oNumTable[6] = {'A', 'B', 'C', 'D', 'E', 'F'};void dTo...

在C语言中如何将10进制转换成16进制?
根据10进制转换为16进制的规则,编写C语言程序将10进制数转换为16进制数。具体实现方法可参考如下程序:include<stdio.h>void main(){ int i, x; \/\/ x表示欲转换的10进制数 int data[10], index=0; \/\/ data数组存放转换后的16进制数,index表示下标 scanf("%d", &x); \/\/ 接...

c语言编程 把十进制转换为十六进制
方法一:#include<iostream>#include <string>using namespace std;string DecIntToHexStr(long long num){string str;long long Temp = num \/ 16;int left = num % 16;if (Temp > 0)str += DecIntToHexStr(Temp);if (left < 10)str += (left + '0');elsestr += ('A' + left -...

用c语言编程:请把输入的十进制长整数以十六进制的形式输出
lnum代表你输入的长整数 初始时l=0;while(num){ a[l++]=num%16;num\/=16;} for(i=l-1;i>=0;i--)printf("%d",a[i]); \/\/ 输出转换结果 printf("\\n");

怎样用C程序将10进制数转换成16进制?
main(){ int x;scanf("%d",&x);printf("%x",x);} === include "stdio.h"main(){ int x,i=0,y,j;char a[80];scanf("%d",&x);y=x;while(x>0){ switch (x%16){ case 1: a[i]='1';break;case 2: a[i]='2';break;case 3: a[i]='3';break;case 4: ...

用C语言程序编写 将一个无符号的十进数转换成十六进制数。
16进制数是0-9加上a-e这16个字符来表示,用递归怎么做出统一性?include "stdio.h"int main(){ int n;int i=0,j;char ch[17]="0123456789ABCDEF";char output[100]={0};printf("请输入一个10进制数:");scanf("%d",&n);if(n<0)\/\/输入负数,则转成正数 n=-n;while(n){ output...

如何用c语言实现10进制转换成16进制
include <stdio.h>#define LEN 100char *decimal2Others (int value, char *string, int radix) { \/*十进制数转任意进制*\/\/*除基数取余法:十进制数不断除以进制基数直至为零,每次相除取得余数之逆序即为转换结果*\/int remain,i=1,j=0; int temp[LEN]; while (value) { \/*除基数...

求c语言十进制数字转换为十六进制的算法
printf("请输入一个十进制整数:");scanf("%d",&num);while(num!=0){ i++;r_gitil=num%16;for(j=i-1;j=0;j--){ switch(a[j]){ case 10: a[j]='A';printf("%c",a[j]);break;case 11: a[j]='B';printf("%c",a[j]);break;case 12: a[j]='C';printf("%c...

用c语言编写函数,将输入的十进制数转换成十六进制数并输出
k; printf("Please enter a positive integer...\\nn="); scanf("%d",&n); printf("%d(10) = 0x",n);if(n){for(i=0;(n&0xf0000000)==0;n<<=4,i++);for(;i<8;i++){k=n&0xf0000000;(k>>=28)&=0x0f;printf("%c",k<10 ? k+'0' : k+0x37)...

相似回答