主题:任意大的十进制数转换为,十六进制
zhishiheng
[专家分:0] 发布于 2010-11-02 19:07:00
[em1]
谁会啊?这个好像不是很简单的!
回复列表 (共9个回复)
沙发
wolf赵帅 [专家分:70] 发布于 2010-11-03 21:34:00
# include <stdio.h>
main ()
{ void turn(int n);
int n;
printf("Please enter a number:");
scanf("%d",&n);
turn(n);
}
void turn(int n)
{ int b,c;
c=1;
b=0;
while(n>0)
{ b+=(n%16)*10;
n=n/16;
c=c*10;
}
printf("%d\n",b);
}
用函数调用做 可以改变输入数的值
根据n改变数据类型 因为数据类型决定了储存数据时内存分配的字节数目(即数值型数据的范围) 没有数据类型包括无限大的数
板凳
z543266153 [专家分:0] 发布于 2010-11-03 22:05:00
一楼是不是忘了考虑int类型的变量的取值范围,如果超出这个范围,我想这个应该运行不了。我是新手,提点小意见,见谅啊。
3 楼
wolf赵帅 [专家分:70] 发布于 2010-11-03 23:48:00
我也考虑到啦 在程序代码后边已经说明啦 根据n的范围改变数据类型 也不太麻烦
4 楼
liupeisong [专家分:2340] 发布于 2010-11-06 01:06:00
参考这个
http://dev.firnow.com/course/4_webprogram/asp.net/netjs/20100629/252288.html
并且应该注意到2进制到16进制的转换是从小数点开始,4位2进制对应1位16进制
5 楼
wolf赵帅 [专家分:70] 发布于 2010-11-06 14:49:00
四楼的大哥 这个题是十进制转化为十六进制啊 虽然您的话也是对的
6 楼
liupeisong [专家分:2340] 发布于 2010-11-06 20:47:00
[quote]四楼的大哥 这个题是十进制转化为十六进制啊 虽然您的话也是对的[/quote]
你在输出时把2进制4位1组不就得到16进制了吗?
关键是这个网址的这种方法才是符合你要求的一种方法,你也可以参考其思路写出自己的代码
难道你还想我给你写出完整的程序吗?
7 楼
Regent2007 [专家分:100] 发布于 2010-11-07 13:56:00
方法有很多啊..建议楼主用栈的方法试试,虽然麻烦点,但是对理解程序提高算法设计能力很有好处!
8 楼
learningC [专家分:0] 发布于 2010-11-08 09:42:00
#include<stdio.h>
int main()
{
long int i;
char num[10];
scanf("%ld",&i);
sprintf(num,"%0lX",i);
printf("%s\n",num);
}
9 楼
wangzining [专家分:620] 发布于 2010-11-08 10:36:00
#include <iostream>
using namespace std;
class stack
{
private:
int n;
char z;
public:
stack *next;
void set(int x)
{
n=x;
}
void get()
{
if(n<10)
cout<<n;
else
{
switch(n)
{
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;
}
}
}
};
stack *p=NULL;
int main()
{
unsigned long int m;
cin>>m;
while(m!=0)
{
int x=m%16;
m/=16;
stack *q=new stack;
q->next=p;
q->set(x);
p=q;
}
while(p!=NULL)
{
p->get();
p=p->next;
}
return 0;
}
我来回复