求10进制转16进制的算法

yanyunpaladin 2003-03-28 08:01:23
帮忙贴一下,简单高效,谢了
Thank you 100000次!!!!!
...全文
1419 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhoukun666 2003-04-05
  • 打赏
  • 举报
回复
up
tellmewhy2003 2003-04-03
  • 打赏
  • 举报
回复
answerear已经回答了,
用了递归的算法,很好,非常清晰,辗转相除法
但是函数中的r已经不必要既然已经知道要转成16进制,何必还传入参数r
OK,其他的char* to char*,或char* to int* 或int* to char* 都大同小异

大家试试看用递归实现数组中找最大值、最小值、平均数、总数之类的函数
格式如下:
Type max(Type element[],int n)//n是数组大小
Type min(Type element[],int n)//n是数组大小
Type average(Type element[],int n)//n是数组大小
Type sum(Type element[],int n)//n是数组大小



bw78619 2003-04-02
  • 打赏
  • 举报
回复
十进制转换为十六进制的公式推导:


十进制的整数部分转换为十六进制:([A]为十进制数值的整数部分,a^b 表示a的b次方)
[A]=xn*16^n+...+x1*16^1+x0
[A]=16*(xn*16^(n-1)+...+x1)+x0
故: [A]/16==xn*16^(n-1)+...+x1 ....... x0
余数即为x0.
以此方法依次求出x1,x2,...,xn即可

十进制的小数部分转化为十六进制:([B]为十进制数值的小数部分)
[B]=y1*16^(-1)+y2*16^(-2)+...+ym*16^(-m)
故:[B]*16 = y1+y2*16^(-1)+...+ym*16^(-m+1)
整数部分即为y1.
以此方法依次求出y2,y3,...,ym即可。


allenwu 2003-03-31
  • 打赏
  • 举报
回复
#include "stdafx.h"
#include "iostream.h"

class Number{
float data;
int datai;
float dataf;
int bit;
public:
Number(float t,int b){
data=t;
bit=b;
datai=(int)data;
dataf=data-datai;
}
void goIBinary(){
short* binary=new short[16];
int i;
for(i=0;i<16;i++)binary[i]=-1;
int t=datai;
i=0;
while(t>0){
binary[i++]=(short)(t%2);
t/=2;
}
for(i=15;i>=0;i--)
if(binary[i]!=-1){
cout<<binary[i];
}
cout<<'.';
return;
}
void goFBinary(){
short* binary=new short[16];
int i;
for(i=0;i<bit;i++)binary[i]=-1;
float t=dataf;
i=0;
for(;i<bit;i++){
t=t*2;
binary[i]=(int)t;
t=t-binary[i];
}
for(i=0;i<bit;i++)
if(binary[i]!=-1){
cout<<binary[i];
}
return;
}
void goBinary(){
goIBinary();
goFBinary();
}
};

void main(){
float data;
int datai=0,dataf=0,bit=16;
cout<<"请输入要转换的数"<<endl;
cin>>data;
cout<<endl;
cout<<"请输入小数点后精确的位数(<=16)"<<endl;
cin>>bit;
cout<<endl;
Number n(data,bit);
short* d=new short[16];
n.goBinary();
cout<<endl;
}
这是10to2的
10to16的原理是一样的。
写得不好,请指教:)
eion 2003-03-31
  • 打赏
  • 举报
回复
char ans[32];
int n=12345;

sprintf(ans, "%X", n);

printf(ans);
mmmcd 2003-03-31
  • 打赏
  • 举报
回复
小数点后乘16,取整数部分,若还有小数部份就继续乘...
Brainboy 2003-03-31
  • 打赏
  • 举报
回复
请问浮点数怎么去处理!谢谢
  • 打赏
  • 举报
回复
m=A/16
n=A mod 16
mn即是
bw78619 2003-03-30
  • 打赏
  • 举报
回复
/* 十进制的数str_d转化为十六进制的数str_h,str_h应分配足够的内存空间 */
void trans(char *str_d,char *str_h)
{
long a;
int i;
char str_h1[12];
int strh1l=0;
char mat[]="ABCDEF";
/* 下面部分将char *str_d转化为数值存于a */
for(a=0,i=strlen(str_d)-1; i>=0; i--)
{
a=a*10;
a+=str_d[i]-'0';
}
/* 下面部分将a转化为16进制字符传逆序存于str_h1 */
do{
if((a%16)<10)
str_h1[strh1l]=(a%16);
else
str_h1[strh1l=mat[(a%16)-10];
strh1l++;
a=(a>>4); /* 相当于a=a/16 */
}while(a>=0);
/* 将str_h1倒序存于str_h */
for(i=0;i<strh1l;i++)
str_h[i]=str_h1[strh1l-i-1];
str_h[strh1l]="\0";
}
yanyunpaladin 2003-03-29
  • 打赏
  • 举报
回复
是 char * to char *的,谢谢
贴一下
answerear 2003-03-29
  • 打赏
  • 举报
回复
C++写的:

void Transform(int num,int r)
{
if(num!=0)
{
int k=num%r;
num/=r;
Transform(num,r);
switch(k)
{
case 10:
cout<<'A';
break;
case 11:
cout<<'B';
break;
case 12:
cout<<'C';
break;
case 13:
cout<<'D';
break;
case 14:
cout<<'E';
break;
case 15:
cout<<'F';
break;
default:
cout<<k;
}
}
}
yanyunpaladin 2003-03-29
  • 打赏
  • 举报
回复
谢了,感激不尽
beiliang 2003-03-29
  • 打赏
  • 举报
回复
char str[100]="20";
int x;
sscanf(str,"%d",&x);
char str1[100];
sprintf(str1,"%x",x);
MessageBox(str1);

我用Vc完成的
三色 2003-03-29
  • 打赏
  • 举报
回复
#include "math.h"
void _10to16(char *_10,char *_16)
{
int n;
n=atoi(_10);
sprintf(_16,"%x",n);
}
main()
{
char _10[20],_16[20];
printf("input 10 jinzhi number:");
scanf("%s",_10);
_10to16(_10,_16);
printf("To _16 :%s\n",_16);
}
gumbour 2003-03-28
  • 打赏
  • 举报
回复
是int to char*
还是 char * to char *

33,010

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧