使用栈实现进制转换

使用栈实现进制转换

题目描述

使用栈将一个很长(>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");

    }
}

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
黑马程序员训练营入学考试题 1、方法中的内部类能不能访问方法中的局部变量,为什么? 2、编写一个类,在main方法中定义一个Map对象(采用泛型),加入若干个对象,然后遍历并打印出各元素的key和value。 3、取出一个字符串中字母出现的次。如:字符串:"abcdekka27qoq" ,输出格式为:a(2)b(1)k(2)... 4、有五个学生,每个学生有3门课(语文、学、英语)的成绩,写一个程序接收从键盘输入学生的信息,输入格式为:name,30,30,30(姓名,三门课成绩),然后把输入的学生信息按总分从高到低的顺序写入到一个名称"stu.txt"文件中。要求:stu.txt文件的格式要比较直观,打开这个文件,就可以很清楚的看到学生的信息。 5、编写一个程序,获取10个1至20的随机,要求随机不能重复。 6、编写三各类Ticket、SealWindow、TicketSealCenter分别代表票信息、售票窗口、售票中心。售票中心分配一定量的票,由若干个售票窗口进行出售,利用你所学的线程知识来模拟此售票过程。 7、写一方法,打印等长的二维组,要求从1开始的自然由方阵的最外圈向内螺旋方式地顺序排列。 如: n = 4 则打印: 1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7 ? 8、编写一个程序,它先将键盘上输入的一个字符串转换十进制,然后打印出这个十进制对应的二进制形式。这个程序要考虑输入的字符串不能转换一个十进制的情况,并对转换失败的原因要区分出是字太大,还是其中包含有非字字符的情况。提示:十进制二进制的方式是用这个除以2,余就是二进制的最低位,接着再用得到的商作为被除去除以2,这次得到的余就是次低位,如此循环,直到被除为0为止。其实,只要明白了打印出一个十进制的每一位的方式(不断除以10,得到的余就分别是个位,十位,百位),就很容易理解十进制二进制的这种方式。 9、28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多少瓶可乐,够28人喝?假如是50人,又需要买多少瓶可乐?(需写出分析思路) 10、有100个人围成一个圈,从1开始报,报到14的这个人就要退出。然后其他人重新开始,从1报,到14退出。问:最后剩下的是100人中的第几个人?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值