
1.十进制转二进制
将余数从下向上倒序写就是结果
例如302
302 2 = 151 余0
151 2 = 75 余1
75 2 = 37 余1
37 2 = 18 余1
18 2 = 9 余0
9 2 = 4 余1
4 2 = 2 余0
2 2 = 1 余0
1 2=0 余1
故二进制为100101110
2.二进制转十进制
1*2^8+0*2^7+0*2^6+1*2^5+0*2^4+1*2^3+1*2^2+1*2^1+0*2^0=302
3.完整代码
#include<stdio.h>
#include<string.h>
#include<math.h>
#define MAX_STACK_SIZE 1024
//定义堆栈结构体
typedef struct{
int stack[MAX_STACK_SIZE];
int top;
}SeqStack;
//压栈函数
int push_stack(SeqStack *pStack,int data){
if(pStack->top<MAX_STACK_SIZE){
pStack->stack[pStack->top] = data;
pStack->top++;
}else{
return -1;
}
}
//出栈函数
int pop_stack(SeqStack *pStack){
if(pStack->top>0){
pStack->top--;
return pStack->stack[pStack->top];
}else{
return -1;
}
}
//新建堆栈
SeqStack get_stack(){
SeqStack seqStack;
int i;
seqStack.top = 0;
for(i=0;i<MAX_STACK_SIZE;i++){
seqStack.stack[i] = 0;
}
return seqStack;
}
//十进制转二进制
void dec2bin(char *argNum){
int iNum;
sscanf(argNum,"%d",&iNum);
SeqStack seqStack = get_stack();
while(iNum){
int mod = iNum%2;
push_stack(&seqStack,mod);
iNum = iNum/2;
}
printf("十进制转换二进制结果:");
int num = pop_stack(&seqStack);
while(num!=-1){
printf("%d",num);
num = pop_stack(&seqStack);
}
}
//二进制转十进制
void bin2dec(char *argNum){
SeqStack seqStack = get_stack();
int i = 0;
int sum = 0;
//将所有二进制数字压栈,但是不包括结尾符号
for(i =0;i<strlen(argNum)-1;i++){
push_stack(&seqStack,argNum[i]-48);
}
for(i=0;i<strlen(argNum)-1;i++){
int num = pop_stack(&seqStack);
//pow(x,y)功能:计算x的y次幂
sum = sum+num*pow(2,i);
}
printf("二进制转换十进制结果:%d",sum);
}
int main(){
char chNum[1024]={0};
int length;
printf("输入要转换的数值:");
scanf("%s",&chNum);
length = strlen(chNum);
//最后以 '$'结束代表输入的十进制数字,以'#'结束代表输入的二进制数字
switch(chNum[length-1]){
case '$':
{
dec2bin(chNum);
break;
}
case '#':
{
bin2dec(chNum);
break;
}
}
return 0;
}