使用栈实现进制转换

使用栈实现进制转换

题目描述

使用栈将一个很长(>30)的十进制数转换为二进制数

分析:

此处虽然讲了用栈操作,但是很明显我们可以不用,直接用数组保存。当然用栈也一样。通过分析,我们得出此题无非就是大数除法。

#include"stdio.h"
#include"string.h"
int main()
{
    int digit[1000];
    char  a[1000],a1[1000];
    long long b;
    int i,j,k,n,l,x,y,mod,mod1;
    while(~scanf("%s",a))//输入数据
    {
        n=strlen(a);//数据长度
        x=0;


        //  l=strlen(a);
        b=0;
        i=0;
        //  printf("n=%d\n",n);
        while(i!=n)//i为最前面且不为0的下标
        {
            mod=0;//保留当前位置的余数
            mod1=0;
            a1[b++]=(a[n-1]-'0')%2+'0';//将最后一个与2取余得到的数保留下来
            for(j=i; j<n; j++)

            {

                mod=(mod1*10+a[j]-'0')%2;//保留j处下标的余数
                a[j]=(mod1*10+a[j]-'0')/2+'0';//j处下标的值/2;
                mod1=mod;将j处下标的余数给mod1,以便下次计算
            }
            //  a1[b++]=a[n-1]%2;
            //        a[n-1]=a[n-1]/2;
            if(a[i]=='0')//如果i处为0了,则i++;
                i++;
        }
        //   printf("i=%d\n",i);
        for(b--; b>=0; b--)
        {
            printf("%c",a1[b]);
        }
        printf("\n");

    }
}


版权声明:本文为qq_43506138原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。