zoukankan      html  css  js  c++  java
  • 任意进制之间的转换

    原创:  

      之前有发一篇进制转换的文章,转换思想在里面,这里不再重复,详情请查看:http://www.cnblogs.com/numen-fan/p/6495009.html

      

    题目描述:
        求任意两个不同进制非负整数的转换(2进制~16进制),所给整数在long所能表达的范围之内。
        不同进制的表示符号为(01,...,9,a,b,...,f)或者(01,...,9,A,B,...,F)。
    输入:
        输入只有一行,包含三个整数a,n,b。a表示其后的n 是a进制整数,b表示欲将a进制整数n转换成b进制整数。a,b是十进制整数,2 =< a,b <= 16。
        数据可能存在包含前导零的情况。
    输出:
        可能有多组测试数据,对于每组数据,输出包含一行,该行有一个整数为转换后的b进制数。输出时字母符号全部用大写表示,即(01,...,9,A,B,...,F)。
    样例输入:
    15 Aab3 7
    样例输出:
    210306
    提示:
    可以用字符串表示不同进制的整数。

    代码:

    //任何进制的转换

    void test3(){

        //输入格式,a,n,b;将a进制的n转为b;

        int a,b;

        char str[40];//保存n

        while (scanf("%d%s%d",&a,str,&b)!=EOF) {

            int tmp = 0,lenth = strlen(str),c=1;//tmp表示将a进制数n转为10进制,len为字符串n的长度,c为权重默认为1,最低位嘛,待会转10进制时使用

            for (int i = lenth-1; i>=0; i--) {

                int x;

                if (str[i]>='0'&&str[i]<='9') {

                    x = str[i]-'0';

                }else if(str[i]>='a'&&str[i]<='z'){

                    x = str[i]-'a'+10;

                }else if(str[i]>='A'&&str[i]>='Z'){

                    x = str[i]-'A'+10;

                }

                tmp+=x*c;//转为10进制,乘权重

                c*=a;//增加权重;

            }

            char ans[40],size = 0;

            do{

                int x = tmp%b;//将10进制转为b进制

                ans[size++] = x<10?x+'0':x-10+'A';//进行结果的装填

                tmp/=b;

            }while(tmp);

    //        puts(ans);这里不能这样用,因为ans为正确顺序的倒着的

            for(int i = size-1;i>=0;i--){

                printf("%c",ans[i]);

            }

            printf(" ");

        }

    }

     
  • 相关阅读:
    09、AppBarControl
    15、ScrollViewerSample
    11、DataBinding
    18、Compression
    关于创建oracle dblink 过程的几点心得吧
    教你如何玩转DK血
    DK需要知道的事
    Displaying Dynamic KML with ASP.NET
    WLK:裁缝/附魔350450速冲攻略
    WLK狂暴,防御战士的一点心得.
  • 原文地址:https://www.cnblogs.com/numen-fan/p/6495650.html
Copyright © 2011-2022 走看看