任意进制转换(数据结构c语言版)
c语言各进制转换方法

二进制,八进制,十进制,十六进制之间的转换算法一、十进制与二进制之间的转换(1)十进制转换为二进制,分为整数部分和小数部分①整数部分方法:除2取余法,即每次将整数部分除以2,余数为该位权上的数,而商继续除以2,余数又为上一个位权上的数,这个步骤一直持续下去,直到商为0为止,最后读数时候,从最后一个余数读起,一直到最前面的一个余数。
下面举例:例:将十进制的168转换为二进制得出结果将十进制的168转换为二进制,(10101000)2分析:第一步,将168除以2,商84,余数为0。
第二步,将商84除以2,商42余数为0。
第三步,将商42除以2,商21余数为0。
第四步,将商21除以2,商10余数为1。
第五步,将商10除以2,商5余数为0。
第六步,将商5除以2,商2余数为1。
第七步,将商2除以2,商1余数为0。
第八步,将商1除以2,商0余数为1。
第九步,读数,因为最后一位是经过多次除以2才得到的,因此它是最高位,读数字从最后的余数向前读,即10101000(2)小数部分方法:乘2取整法,即将小数部分乘以2,然后取整数部分,剩下的小数部分继续乘以2,然后取整数部分,剩下的小数部分又乘以2,一直取到小数部分为零为止。
如果永远不能为零,就同十进制数的四舍五入一样,按照要求保留多少位小数时,就根据后面一位是0还是1,取舍,如果是零,舍掉,如果是1,向入一位。
换句话说就是0舍1入。
读数要从前面的整数读到后面的整数,下面举例:例1:将0.125换算为二进制得出结果:将0.125换算为二进制(0.001)2分析:第一步,将0.125乘以2,得0.25,则整数部分为0,小数部分为0.25;第二步, 将小数部分0.25乘以2,得0.5,则整数部分为0,小数部分为0.5;第三步, 将小数部分0.5乘以2,得1.0,则整数部分为1,小数部分为0.0;第四步,读数,从第一位读起,读到最后一位,即为0.001。
例2,将0.45转换为二进制(保留到小数点第四位)大家从上面步骤可以看出,当第五次做乘法时候,得到的结果是0.4,那么小数部分继续乘以2,得0.8,0.8又乘以2的,到1.6这样一直乘下去,最后不可能得到小数部分为零,因此,这个时候只好学习十进制的方法进行四舍五入了,但是二进制只有0和1两个,于是就出现0舍1入。
C语言数据结构之十进制转任意进制

C语⾔数据结构之⼗进制转任意进制#include<stdio.h>#include<stdlib.h>#define N 100typedef struct//栈的结构定义{int elem[N];int top;//栈顶}Stack;typedef struct //循环队列的结构定义{int elem[N];int front;int rear;}Queue;int Exchange(Stack *);void main(){int result;Stack s;s.top=0;//栈顶指向当前栈顶的下⼀位置Queue q;q.front=q.rear=0;Exchange(&s);getchar();printf("\n退出程序(Y/N):");//exit=getchar();getchar();}int Exchange(Stack *s){int r,a,b,n,i;//r是⼗进制数,a是需要转换的进制数,b是余数,n是栈的长度s->top=0;printf("请输⼊需要操作⼗进制数:\n");scanf("%d",&r);printf("需要将该数转换为多少进制的数?\n");scanf("%d",&a);while(r!=0){b=r%a;r=r/a;s->elem[s->top++]=b;}n=s->top-0;printf("栈中元素依次出栈:");for(i=0;i<n;i++){b=s->elem[--s->top];//先将栈顶指针下移⼀位,然后取出元素值赋值给eprintf("%x",b);}printf("\n");return 0;}。
进制转换C语言

{
result=result+pop()*pow(jz,times);
times--;
}
printf("%d",result);
}
//填充数字字母表
void setTable(char table[]){
int i = 0;
for(;i<10;i++){
table[i]='0'+i;
int pop();
int isEmpty();
//声明全局变量
Stack *stack;
int main(){
int number,radix;//number-被转换数radix-转换进制
int n,jz;
char table[36];//定于数字字母匹配表
setTable(table);
printf("输入十进制数字:");
scanf("%d",&jz);
printf("输入要转换的数字:");
scanf("%d",&n);
int times=0,result=0;
while(true)
{
push(n%10);பைடு நூலகம்
n=n/10;
times++;
if(n==0)
{
times--;
break;
}
}
printf("结果为:");
}
for(;i<37;i++){
table[i]='A'+i-10;
C语言实现任意进制转换

C语言实现任意进制转换#include<stdio.h>#include<math.h>int func(int n,int jinzhi);int main(void)int n,jinzhi;printf("please input the number n:");scanf("%d",&n);printf("please input the base n belong to:");scanf("%d",&jinzhi);printf("n=%d belong to base %d convert to decimal is: %d\n",n,jinzhi,func(n,jinzhi));return 0;int func(int n,int jinzhi)int m=0,i=0,k=n;while(n>0)m=m+(n%10)*pow(jinzhi,i);n=n/10;i++;}printf("the %d belong to base %d convert to decimal is :",k,jinzhi);return m;#include<stdio.h>#include<stdlib.h>//定义一个全局变量接收用户输入的数组元素个数int g_value;//定义一个函数可以接收用户的数组元素输入,先声明该函数int getArray(int myArray[]);//定义一个函数可以求用户输入的数组元素和int calSum(int myArray[]);//定义一个函数求用户输入的数组元素的平均值float calAvg(int myArray[]);//定义一个函数输出数组元素的最大值和最小值void printMaxMin(int myArray[]);//定义一个函数打印用户输入的数组void printArray(int myArray[]);int main(void)//可以让用户输入数组元素的个数printf("please input the size of array\n");scanf("%d",&g_value);int myArray[g_value];//输出数组printf("please input the array elements\n");getArray(myArray);printf("your input array is:\n");printArray(myArray);//求数组元素的和int sum=calSum(myArray);printf("the sum of array element is: %d\n",sum);//求数组元素的平均值float avg=calAvg(myArray);printf("the average of array element is: %.2f\n",avg); //输出数组中的最大值和最小值printMaxMin(myArray);return 0;//定义一个函数可以接收用户的数组元素输入,改函数接收两个参数,一个是数组名,一个是数组的元素个数。
C语言教程进制以及进制转换

C语言教程进制以及进制转换进制是数学中的一个基本概念,它描述了一种用特定的位数来表示数字的方法。
在计算机科学中,常见的进制包括二进制、十进制和十六进制。
1. 二进制(Binary)二进制是计算机中最基本的进制,它只使用0和1来表示数字。
一位二进制数称为一个比特(bit),多个比特可以组合成更大的数。
例如,二进制数1101表示十进制的13,其计算方式如下所示:(1x2^3)+(1x2^2)+(0x2^1)+(1x2^0)=132. 十进制(Decimal)十进制是我们日常生活中最常用的进制,它使用0到9这10个数字来表示数字。
每一位数字的权值依次增加10倍。
例如,数字253表示为十进制,其计算方式如下所示:(2x10^2)+(5x10^1)+(3x10^0)=2533. 十六进制(Hexadecimal)十六进制是计算机中常用的进制之一,它使用0到9这10个数字以及A到F这6个字母来表示数字。
每一位数字的权值依次增加16倍。
在编程中,十六进制常常用于表示内存地址、颜色值等。
例如,数字FF表示为十六进制,其计算方式如下所示:(15x16^1)+(15x16^0)=255进制转换是将一个进制表示的数转换成另一个进制表示的数的过程。
在C语言中,可以使用printf和scanf函数进行进制转换。
1.从十进制转换为其他进制将十进制数转换为二进制可以使用位运算符和移位运算符进行计算。
例如,将十进制数13转换为二进制数的方法如下所示:int num = 13;int binary = 0;int base = 1;while (num > 0)binary = binary + (num % 2) * base;num = num / 2;base = base * 10;printf("Binary: %d\n", binary);将十进制数转换为十六进制可以使用除法和取余运算符进行计算。
C任意进制转换程序

任意进制变换程序语言写的一个任意进制变换的程序,不使用库供应的变换函数./:定义控制台应用程序的入口点。
#include"stdafx.h"#include#include#include#include#include #defineWIDTH10#defineDATAWIDTH50#defineMAX4294967295#defineCONST_22#defineCONST_33#defineCONST_88#defineCONST_99#defineCONST_1010#defineCONST_1616#defineCHAR_0'0'#defineCHAR_9'9'#defineCHAR_a'a'#defineCHAR_SPACE''#defineSTRING_0"0"#defineSTRING_Z"Z"boolScale();boolGetSourceScale(int*scale_in);boolGetObjectScale(int*scale_out);doubleOtherToDeci(intscale_in,charinputdata[]);voidDeciToOther(unsignedlongdeci,intscale_out,charoutputdata[]);boolGetData(chardata[],intCONCOUNT,intflg);boolGetScale(chartemp[]);boolGetSource(intin_scale,charinputdata[]);voidScaleChange(intscale_in,charinputdata[] ,intscale_out,charoutputdata[]);voidCleanScreen();int_tmain(intargc,_TCHAR*argv[]){intflg=0;charcs[WIDTH];memset(cs,0x00,sizeof(cs));while(1){printf("-----------------------------------------------------------------\n");printf("DataTransformBetweenTwoScales\n");printf("----------------------------------------\n");/* 进制变换主函数*/if(!Scale()){break;}printf("-----------------------------------------------------------------\n");printf("inputanykeyandpress'Enter'keytocontinue,'Z'forexit:");if(!GetData(cs,WIDTH,flg))/* 判断可否连续执行下一次变换*/{break;}system("cls");/*清屏*/}return0;}boolScale(){intscale_in,scale_out;charinputdata[DATAWIDTH];charoutputdata[DATAWIDTH];/*输入源数据进制*/if(!GetSourceScale(&scale_in))returnfalse;}/*输入源数据*/if(!GetSource(scale_in,inputdata)){returnfalse;}/*输入目标数据进制*/if(!GetObjectScale(&scale_out)){returnfalse;}/*进行进制变换*/ScaleChange(scale_in,inputdata,scale_out,outputdata);returntrue; }boolGetSourceScale(int*scale_in)/* 输入源数据进制*/{chartemparray[WIDTH];memset(temparray,0x00,sizeof(temparray));printf("Inputsourcedatascaleandpress'Enter'key(oneof2,8,10,16.'Z'forexit):\n");if(!GetScale(temparray)){returnfalse;*scale_in=atoi(temparray);returntrue;}boolGetObjectScale(int*scale_out)/* 输入目标数据进制*/ {chartemparray[WIDTH];memset(temparray,0x00,sizeof(temparray));printf("Inputobject datascaleandpress'Enter'key(oneof2,8,10,16.'Z'forexit):\n");if(!GetScale(temparray)){returnfalse;}*scale_out=atoi(temparray);returntrue;}boolGetData(chardata[],intCONCOUNT,intflg)/* 输入数据*/{inti,icount;charc;char*p;boolspaceFlag;i=0;icount=0;spaceFlag=true;while((c=getchar())!=0x0a){if(spaceFlag&&c==CHAR_SPACE)/* 去掉前空格*/{continue;}if(!spaceFlag&&c==CHAR_SPACE)/* 去掉后空格*/{icount++;continue;}elseif(icount>0){if(flg){CleanScreen();printf("ERROR!Pleaseinputagain('Z'forexit):\n");/* 输入进制也许源数据时,中间有空格,则重新输入*/i=0;icount=0;spaceFlag=true;fflush(stdin);continue;else{break;}}if(i==CONCOUNT-1)/* 判断可否输入数据过长*/ {if(flg){CleanScreen();printf("ERROR!Toomanyinputagain('Z'forexit):\n");memset(data,0x00,sizeof(data));fflush(stdin);i=0;continue;}else{break;}}if(c==CHAR_0&&!strcmp(data,STRING_0))continue;}data[i]=c;i++;spaceFlag=false;}data[i]='\0';p=data;if(*p==CHAR_0&&strlen(p)>1){p++;}strcpy(data,p);if(strlen(data)&&!strcmp(data,STRING_Z)) {returnfalse;}returntrue;}/*输入数据进制*/boolGetScale(chartemp[]){inti,num,kbn_flg;charscalewidth[WIDTH];char*s;boolflag;kbn_flg=1;flag=false;while(!flag){memset(scalewidth,0x00,sizeof(scalewidth));memset(temp,0x00,sizeof(temp));if(!GetData(scalewidth,WIDTH,kbn_flg))/* 输入数据*/{returnfalse;}s=scalewidth;if(!strlen(s))/* 判断可否输入数据*/ {CleanScreen();printf("ERROR!Pleaseinputthescale(oneof2,8,10,16.'Z'for exit):\n");continue;}i=0;while(*s){if(*s>=CHAR_0&&*s<=CHAR_9)/* 判断可否输入整数*/{temp[i]=*s;i++;s++;flag=true;}else{CleanScreen();printf("ERROR!Pleaseinputthescale(oneof2,8,10,16.'Z'forexit):\n");flag=false;break;}}temp[i]='\0';num=0;if(flag){num=atoi(temp);if(!(num==CONST_2||num==CONST_8||num==CONST_10||num==CONST_16))/*判断可否输入合法整数*/{CleanScreen();printf("ERROR!Pleaseinputthescale(oneof2,8,10,16.'Z'forexit):\n");flag=false;}}}returntrue;}/*输入源数据*/boolGetSource(intin_scale,charinputdata[]){inti,kbn_flg;char*s;charsourcedata[DATAWIDTH];boolflag;kbn_flg=1;flag=false;printf("Pleaseinputone%dscaledata('Z'forexit):\n",in_scale);while(!flag){memset(sourcedata,0x00,sizeof(sourcedata));memset(inputdata,0x00,sizeof(inputd ata));if(!GetData(sourcedata,DATAWIDTH,kbn_flg))/*输入数据*/{returnfalse;fflush(stdin);s=sourcedata;if(!strlen(s))/* 判断可否输入数据*/{CleanScreen();printf("ERROR!Theinputisnotavailable!Pleaseinputagain('Z'forexit):\n");continue;}i=0;while(*s)/*判断可否输入合法数据 */{if((in_scale>=CONST_2&&in_scale<=CONST_10)&&(CHAR_0<=*s&&*s<in_scale+CHAR_0)){ inputdata[i]=*s;i++;s++;flag=true;}elseif((in_scale==CONST_16)&&((CHAR_0<=*s&&*s<=CHAR_9)||(CHAR_A<=*s&&*s<=in_scale+CHAR_A-CONST_10(CHAR_a<=*s&&*s<=in_scale+CHAR_a-CONST_10-1))){inputdata[i]=*s;i++;s++;flag=true;}else{CleanScreen();printf("ERROR!Theinputisnotavailable!Pleaseinputagain('Z'forexit):\n");flag=false;break;}}inputdata[i]='\0';if(OtherToDeci(in_scale,inputdata)>(double)MAX){CleanScreen();printf("ERROR!Theinputisnotavailable!Pleaseinput again(lessthan");switch(in_scale){caseCONST_2:printf("32bits1.");break;caseCONST_8:printf("37777777777.");break;caseCONST_10:printf("4294967295.");break;caseCONST_16:printf("8bitsForf.");break;}printf("'Z'forexit):\n");flag=false;continue;}}returntrue;}/*其他进制变换为十进制*/doubleOtherToDeci(intscale_in,charinputdata[]){inti,len,midint;doublemiddbl,temp;len=strlen(inputdata);temp=0.00;for(i=0;i<len;i++){ midint=inputdata[i];if(CHAR_0<=midint&&midint<=CHAR_9){midint=midint-CHAR_0;/*0-9*/}elseif(CHAR_A<=midint&&midint<=CHAR_Z){midint=midint-CHAR_A+CONST_10;/*A-Z*/}else{midint=midint-CHAR_a+CONST_10;/*a-z*/}middbl=midint*pow(scale_in,len-i-1);temp=temp+middbl;}returntemp;}/*十进制变换为其他进制*/voidDeciToOther(unsignedlongdeci,intscale_out,charoutputdata[]){intm,n;m=0;n=0;while(deci){m=deci%scale_out;if(m>CONST_9){outputdata[n]=m+CHAR_A-CONST_10;}else{outputdata[n]=m+CHAR_0;}deci=deci/scale_out;n++;}for(m=0;m<=n/2-1;m++)/* 反序获取目标数据*/ {chart;t=outputdata[m];outputdata[m]=outputdata[n-1-m];outputdata[n-1-m]=t;outputdata[n]='\0';}voidPutSource(charinputdata[])/* 输出源数据*/{intk;if(!strcmp(inputdata,STRING_0))/* 源数据为0*/{printf("(Thesourcedatais:0)\n");}else{printf("(Thesourcedatais:");for(k=0;k<strlen(inputdata);k++){printf("%c",inputdata[k]);}printf(")\n");}}voidScaleChange(intscale_in,charinputdata[],intscale_out,charoutputdata[])/*进制变换*/{intk;unsignedlongdeci;deci=0;if(scale_in==scale_out)据进制和目标数据进制相同/* 原数,不用变换*/if(!strcmp(inputdata,STRING_0)){printf("Theobjectdatais:\n0\n");}else{printf("Theobjectdatais:\n");for(k=0;k<strlen(inputdata);k++){printf("%c",inputdata[k]);}printf("\n");}PutSource(inputdata); }else{if(scale_in==CONST_10){deci=atol(inputdata);/*源数据是十进制,直接变换为十进制数*/}else{deci=(unsignedlong)OtherToDeci(scale_in,inputdata);/* 其他进制变换为十进制*/}if(scale_out==CONST_10)/*若是目标进制是十进制,直接输出十进制数*/{printf("Theobjectdatais:\n%u\n",deci);}else{if(!deci)/*源数据为 0*/{printf("Theobjectdatais:\n0\n");}else{DeciToOther(deci,scale_out,outputdata);/*十进制变换为其他进制*/printf("Theobjectdatais:\n");/* 输出变换后结果*/for(k=0;k<strlen(outputdata);k++){printf("%c",outputdata[k]);}printf("\n");}}PutSource(inputdata);}}voidCleanScreen()/*清屏*/{staticinterrcount=0;errcount++;if(!(errcount%CONST_3)) {errcount=0;system("cls");}}。
c语言_各种进制转换

c语言各种进制转换计算机中常用的数的进制主要有:二进制、八进制、十六进制。
2进制,用两个阿拉伯数字:0、1;8进制,用八个阿拉伯数字:0、1、2、3、4、5、6、7;10进制,用十个阿拉伯数字:0到9;16进制就是逢16进1,但我们只有0~9这十个数字,所以我们用A,B,C,D,E,F这五个字母来分别表示10,11,12,13,14,15。
字母不区分大小写。
以下简介各种进制之间的转换方法:一、二进制转换十进制例:二进制“1101100”1101100 ←二进制数6543210 ←排位方法例如二进制换算十进制的算法:1*26 + 1*25 + 0*24 + 1*23 + 1* 22 + 0*21 + 0*20↑ ↑说明:2代表进制,后面的数是次方(从右往左数,以0开始)=64+32+0+8+4+0+0=108二、二进制换算八进制例:二进制的“10110111011”换八进制时,从右到左,三位一组,不够补0,即成了:010 110 111 011然后每组中的3个数分别对应4、2、1的状态,然后将为状态为1的相加,如:010 = 2110 = 4+2 = 6111 = 4+2+1 = 7011 = 2+1 = 3结果为:2673三、二进制转换十六进制十六进制换二进制的方法也类似,只要每组4位,分别对应8、4、2、1就行了,如分解为:0101 1011 1011运算为:0101 = 4+1 = 51011 = 8+2+1 = 11(由于10为A,所以11即B)1011 = 8+2+1 = 11(由于10为A,所以11即B)结果为:5BB四、二进制数转换为十进制数二进制数第0位的权值是2的0次方,第1位的权值是2的1次方……所以,设有一个二进制数:0110 0100,转换为10进制为:计算:0 * 20 + 0 * 21 + 1 * 22 + 0 * 23 + 0 * 24 + 1 * 25 + 1 * 26 + 0 * 27 = 100五、八进制数转换为十进制数八进制就是逢8进1。
C语言实现任意进制转换

C语言实现任意进制转换任意进制转换是指将一个数从一种进制表示转换为另一种进制表示。
在计算机科学中,常见的进制包括二进制、八进制、十进制和十六进制。
下面我们将以C语言为例,实现任意进制之间的转换。
一、十进制到其他进制的转换1.二进制转换对于一个十进制数,我们可以通过对其进行除2取余的操作,得到其二进制表示。
具体的实现如下:```c#include<stdio.h>void decimalToBinary(int num)int binary[32], i = 0;while (num > 0)binary[i] = num % 2;i++;num /= 2;}for (int j = i - 1; j >= 0; j--)printf("%d", binary[j]);}int mainint decimalNumber;printf("请输入一个十进制数:");scanf("%d", &decimalNumber);printf("转换为二进制数为:");decimalToBinary(decimalNumber);return 0;```2.八进制转换对于十进制数,可以通过对其进行除8取余的操作,得到其八进制表示。
具体的实现如下:```c#include<stdio.h>void decimalToOctal(int num)int octal[100], i = 0;while (num > 0)octal[i] = num % 8;i++;num /= 8;}for (int j = i - 1; j >= 0; j--)printf("%d", octal[j]);}int mainint decimalNumber;printf("请输入一个十进制数:");scanf("%d", &decimalNumber);printf("转换为八进制数为:");decimalToOctal(decimalNumber);return 0;```3.十六进制转换对于一个十进制数,可以通过对其进行除16取余的操作,得到其十六进制表示。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
以下是在vc++6.0下运行的结果,我列举了输入345,进制分别为2,8,16的得出的结果,下面的不止只有这三个,输入任意进制的都可以
输入一个整数和进制数:345,2
转换成进制之后的数:101011001
Press any key to continue
输入一个整数和进制数:345,2
转换成进制之后的数:101011001
Press any key to continue
输入一个整数和进制数:345,16
转换成进制之后的数:159
Press any key to continue
程序如下:
#include<stdio.h>
#include<stdlib.h>
#define TRUE 1
#define FALSE 0
#define Stack_Size 100
typedef int StackElementType;
typedef struct
{
StackElementType elem[Stack_Size];
int top;
}SeqStack;
void InitStack(SeqStack *S)
{
S->top=-1;
}
int Push(SeqStack *S,StackElementType x) {
if(S->top==Stack_Size-1)
return(FALSE);
S->top++;
S->elem[S->top]=x;
return(TRUE);
}
int Pop(SeqStack *S,StackElementType *x) {
if(S->top==-1)
return(FALSE);
else
{
*x=S->elem[S->top];
S->top--;
return(TRUE);
}
}
int GetTop(SeqStack *S,StackElementType *x) {
if(S->top==-1)
return(FALSE);
else
{
*x=S->elem[S->top];
return(TRUE);
}
}
void main()
{
int m,n,x;
char ch;
SeqStack S;
InitStack (&S);
printf("输入一个整数和进制数:");
scanf("%d,%d",&m,&n);
while(m)
{
Push(&S,m%n);
m=m/n;
}
printf("转换成进制之后的数:"); while(S.top!=-1)
{
if(S.elem[S.top]>9)
{char ch='A'+S.elem[S.top]-10;
printf("%c",ch);}
else
printf("%d",S.elem[S.top]);
Pop(&S,&x);
}
printf("\n");
}。