栈的应用进制转换
话不多说直奔主题
1.二进制转换为10进制
首先看二进制数:101010
计算方式是:从左到右(低位到高位)以此0*2^0+1*2^1+0*2^2+1*2^3+0*2^4+1*2^5=2^1+2^3+2^5=42
算法:将你输入的二进制数一次入栈,然后再一次出栈进行sum=sum+(e-48)pow(2,i);这么一个转换。这里的sum就是计算转换后的数字的总和,e为出栈的数字,为什么要-48呢,因为我的是char字符的输入要将它转换为真正的1或者0,pow(2,i),是计算2^i,现在就很好理解这段代码了吧。接下来贴代码
void Convert()
{
char input;
int len;
int i = 0,sum=0;
char e;
stack stack3;
Initstack(&stack3);
printf("请输入你要转换的二进制数,按#号键结束:");
scanf("%c", &input);
while ('#' != input)
{
pushstack(&stack3, input);
scanf("%c", &input);
}
len = getlen(stack3);
for (i = 0; i < len; i++)
{
popstack(&stack3, &e);
sum = sum + (e-48)*(int)pow(2, i);
}
printf("转后后的结果为:%d\n", sum);
}
这个在二进制转换10的进制的基础上只需要要三位一转换就可以了
接下来贴代码:
void Convert()
{
char input;
int i = 0, j = 0;
char e;
stack stack3;
stack stack4;
Initstack(&stack3);
Initstack(&stack4);
printf("请输入你要转换的二进制数,按#号键结束:");
scanf("%c", &input);
while ('#' != input)
{
pushstack(&stack3, input);
scanf("%c", &input);
}
for (j = 0; j < getlen(stack3)/3||getlen(stack3)!=0; i++)//判断是否进行几次转换
{
int sum = 0;
for (i = 0; i < 3&&getlen(stack3) != 0; i++)//一次转几个数是否转换完
{
popstack(&stack3, &e);
sum = sum + (e - 48)*(int)pow(2, i);
}
pushstack(&stack4, sum);
}
printf("转换后的结果:");
while (getlen(stack4)!=0)
{
popstack(&stack4,&e);//取出保存的结果
printf("%d", e);
}
printf("\n");
}
3.10进制转换为二进制
这里直接用原始的方法就可以了
代码如下:
void test()
{
int input;
stack stack;
Initstack(&stack);
printf("请输入你要转换的十进制数:");
scanf("%d", &input);
do
{
int sum = 0;
int n = 0;
sum = input % 2;
input /= 2;
pushstack(&stack, sum);
} while (input != 0);
int len = getlen(stack);
int count = 0;
printf("转换后的二进制为");
for (int i = 0; i < len; i++)
{
popstack(&stack, &input);
printf("%d",input);
count++;
}
printf("\n");
printf("共计:%d位", count);
printf("\n");
}
以上就是几种简单的栈的应用--进制转换。