怎样编写一程序:把一个十进制数转换成三进制数啊

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎样编写一程序:把一个十进制数转换成三进制数啊相关的知识,希望对你有一定的参考价值。

三进制数用符号"-,0.1"表示.比如三进制数是 -0表示十进制的数 (-2)
三进制数是101表示十进制的数 (10)
希望把程序过程写出来,把算法写好,越具体越好,谢谢拉

1、二进制数、八进制数、十六进制数转十进制数
有一个公式:二进制数、八进制数、十六进制数的各位数字分别乖以各自的基数的(N-1)次方,其和相加之和便是相应的十进制数。个位,N=1;十位,N=2...举例:
110B=1*2的2次方+1*2的1次方+0*2的0次方=0+4+2+0=6D
110Q=1*8的2次方+1*8的1次方+0*8的0次方=64+8+0=72D
110H=1*16的2次方+1*16的1次方+0*16的0次方=256+16+0=272D
2、十进制数转二进制数、八进制数、十六进制数
方法是相同的,即整数部分用除基取余的算法,小数部分用乘基取整的方法,然后将整数与小数部分拼接成一个数作为转换的最后结果。
例:见四级指导16页。
3、二进制数转换成其它数据类型
3-1二进制转八进制:从小数点位置开始,整数部分向左,小数部分向右,每三位二进制为一组用一位八进制的数字来表示,不足三位的用0补足,
就是一个相应八进制数的表示。
010110.001100B=26.14Q
八进制转二进制反之则可。
3-2二进制转十进制:见1
3-3二进制转十六进制:从小数点位置开始,整数部分向左,小数部分向右,每四位二进制为一组用一位十六进制的数字来表示,
不足四位的用0补足,就是一个相应十六进制数的表示。
00100110.00010100B=26.14H
十进制转各进制
要将十进制转为各进制的方式,只需除以各进制的权值,取得其余数,第一次的余数当个位数,第二次余数当十位数,其余依此类推,直到被除数小于权值,最后的被除数当最高位数。
一、十进制转二进制
如:55转为二进制
2|55
27――1 个位
13――1 第二位
6――1 第三位
3――0 第四位
1――1 第五位
最后被除数1为第七位,即得110111
二、十进制转八进制
如:5621转为八进制
8|5621
702 ―― 5 第一位(个位)
87 ―― 6 第二位
10 ―― 7 第三位
1 ―― 2 第四位
最后得八进制数:127658
三、十进制数十六进制
如:76521转为十六进制
16|76521
4726 ――5 第一位(个位)
295 ――6 第二位
18 ――6 第三位
1 ―― 2 第四位
最后得1276516
二进制与十六进制的关系
2进制 0000 0001 0010 0011 0100 0101 0110 0111
16进制 0 1 2 3 4 5 6 7
2进制 1000 1001 1010 1011 1100 1101 1110 1111
16进制 8 9 a(10) b(11) c(12) d(13) e(14) f(15)
可以用四位数的二进制数来代表一个16进制,如3A16 转为二进制为:
3为0011,A 为1010,合并起来为00111010。可以将最左边的0去掉得1110102
右要将二进制转为16进制,只需将二进制的位数由右向左每四位一个单位分隔,将各单位对照出16进制的值即可。
二进制与八进制间的关系
二进制 000 001 010 011 100 101 110 111
八进制 0 1 2 3 4 5 6 7
二进制与八进制的关系类似于二进制与十六进制的关系,以八进制的各数为0到7,以三位二进制数来表示。如要将51028 转为二进制,5为101,1为001,0为000,2为010,将这些数的二进制合并后为1010010000102,即是二进制的值。
若要将二进制转为八进制,将二进制的位数由右向左每三位一个单位分隔,将事单位对照出八进制的值即可。
参考技术A #include <stdio.h>
#include <stdlib.h>
void main ()

int a[32],i,j=0,n;
printf ("please input the n: ");
scanf ("%d",&n);
printf ("十进制数 %d 转换成二进制数是:",n);
for (i=0;i<=31;i++)

a[i]=n%3;
n=n/3;
if (n!=0)
j++;

for (i=j;i>=0;i--)
printf ("%d",a[i]);
printf ("\n");
参考技术B #include<iostream>
#include<stack>
using namespace std;
enum threezero=0,one=1,two=2;//枚举的三进制数据类型
void main(void)

long int a;
stack<three> data;
bool zhengshu=true;//用来存放变量标记是否为正数
cin>>a;
if(a<0)

zhengshu=false;
a=-a;

do

data.push(three(a%3));
a=a/3;
while(a>0);//逆序转化
if(zhengshu==false)

cout<<'-';

while(data.size()>0)//正序输出

cout<<(int)data.top();
data.pop();

cout<<endl;

//此代码只适用于整数(包括正整数和负整数及零),小数不可转化
参考技术C #include <iostream>
using namespace std;
int a[100];
void func(int x)//x此处是10进制数,转化成三进制

int i=0;
while(x!=0)

a[i]=x%3;
x/=3;
i++;

for(int k=i-1;k>=0;k--)

cout<<a[k];

cout<<endl;


void main()

int n;
cout<<"输入10进制数:"<<endl;
cin>>n;
cout<<"转化成三进制:"<<endl;
func(n);

本回答被提问者采纳
参考技术D 好像有个库函数是itoa吧,可以在任意进制之间转换。

C语言调用函数编写把十进制整数n转换成十六进制怎么编程?

思路:十进制整数转换为十六进制整数采用"除16取余,逆序排列"法。
具体做法是:用16整除十进制整数,可以得到一个商和余数;再用16去除商,又会得到一个商和余数,如此进行,直到商为0时为止,然后把先得到的余数作为十六进制数的低位有效位,后得到的余数作为十六进制数的高位有效位,依次排列起来。

参考代码:

#include "stdio.h" 
int main() 
 
int num,a[100],i=0,m=0; 
char hex[16]=\'0\',\'1\',\'2\',\'3\',\'4\',\'5\',\'6\',\'7\',\'8\',\'9\',\'A\',\'B\',\'C\',\'D\',\'E\',\'F\';
scanf("%d",&num); 
while(num>0) 
 
a[i++]=num%16; 
num=num/16; 
 
printf("转化为十六进制的数为:"); 
for(i=i-1;i>=0;i--)//倒序输出 
 
m=a[i];
printf("%c",hex[m]); 
 
printf("\\n"); 

/*
运行结果:
17
转化为十六进制的数为:11
*/
参考技术A 调用系统函数strtol。我觉得你这个问题:把十进制整数n转换成十六进制怎么编程 本身就有问题,十进制整数n转换成十六进制只是显示方式不一样而已,在计算机内部其实都是按二进制存储的。比如int i; i=96和i=0x60你按%d打印出来的是一样的。 参考技术B #include <malloc.h>
#include <iostream>
#include<string>
#include<cctype>
#define STACKSIZE 50
#define STACKINCREMENT 20
#define OVERFLOW -1
#define OK 1
#define ERROR -1

using namespace std;

typedef struct

int *base;
int *top;
int stacksize;
Stack;

int InitStack(Stack &s) //创建一个空栈

s.base=(int*)malloc(STACKSIZE*sizeof(int));

if(!s.base)
return (OVERFLOW);

s.top=s.base;

s.stacksize=STACKSIZE;

return (OK);


int Push(Stack &s,int e) //入栈

if((s.top-s.base)>=s.stacksize)

s.base=(int*)realloc(s.base,(STACKSIZE+STACKINCREMENT)*sizeof(int));
if(!s.base)
return(OVERFLOW);

s.top=s.base+s.stacksize;
s.stacksize+=STACKINCREMENT;

*s.top++=e;
return (OK);


int Empty(Stack s) //判断栈是否为空

if(s.base==s.top)
return(1);
else
return(0);

int * Pop(Stack &s,int *e)

if(Empty(s))
return (NULL);
e=--s.top;
return e;


void main()


int i,*e;
e=new int ;

int *getResult;
getResult=new int ;
char ch;

do
cout<<"请输入一个正整数: "<<endl;
cin>>i;

Stack s;

InitStack(s);

while(i)

Push(s,i%16);
i=i/16;



cout<<"转为的16进制数为: "<<endl;

while(!Empty(s))

e=Pop(s,getResult);
if(e!=NULL)
cout<<*e;


cout<<endl;

cout<<"您想继续求解十六进制吗?请输入您的选择(y/n)"<<endl;
cin>>ch;
if(isupper(ch)==1)
ch=tolower(ch);
while(ch!='n');

本回答被提问者和网友采纳
参考技术C 简单方法之一:
#include <iostream>
#include <stdio.h>
using namespace std;

int main(void)

int num;
char buf[100];
cin>>num;
itoa(num,buf,16);
cout<<buf<<"\n";

return 0;

参考资料:还有其他方法可以参考http://hi.baidu.com/hong3088/blog/item/6f8a802e93bf003f1e3089d1.html

参考技术D #include<stdio.h>
int main()

int n;
scanf("%d",&n);
printf("%x\n",n);
return 0;

以上是关于怎样编写一程序:把一个十进制数转换成三进制数啊的主要内容,如果未能解决你的问题,请参考以下文章

十进制100怎样转换成ascii码?

c语言编写一程序,以字符串形式输入十进制数,将字符串对应的十进制数转换成二进制数,将得到的结果输出。

js怎样把10进制数转换成16进制数显示?

怎样把十进制数据转换为十六进制字符串

excel怎样把数字转换成16进制

C语言调用函数编写把十进制整数n转换成十六进制怎么编程?