代码人生的小狗窝

一行行枯燥的代码,却描绘出人生的点点滴滴

您现在的位置是:首页>_C++

标题1118:数制转换 C++/Java

发布时间:2019-10-14浏览(2309)

    题目1118:数制转换 C++/Java
    题目描述:

        求任意两个不同进制非负整数的转换(2进制~16进制),所给整数在long所能表达的范围之内。
        不同进制的表示符号为(0,1,...,9,a,b,...,f)或者(0,1,...,9,A,B,...,F)。

    输入:

        输入只有一行,包含三个整数a,n,b。a表示其后的n 是a进制整数,b表示欲将a进制整数n转换成b进制整数。a,b是十进制整数,2 =< a,b <= 16。

        数据可能存在包含前导零的情况。

    输出:

        可能有多组测试数据,对于每组数据,输出包含一行,该行有一个整数为转换后的b进制数。输出时字母符号全部用大写表示,即(0,1,...,9,A,B,...,F)。

    样例输入:
    15 Aab3 7
    样例输出:
    210306
    提示:

    可以用字符串表示不同进制的整数。



    C++代码:

    #include <stdio.h>
    #include <math.h>
    #include <string.h>
     
    #define MAX 1000
     
    int main()
    {
        int data[16]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
        char suju[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
        int a,b;
        char n[100];
        char stack[MAX];
        int i,j;
        while(scanf("%d%s%d",&a,n,&b)!=EOF)
        {
            int inda=0;
            int len = strlen(n);
            int top=-1;
            for(i=0;i<len;i++)
            {
                switch(n[i])
                {
                case '0':break;
                case '1':inda += (int)pow(a,len-i-1)*data[1];break;
                case '2':inda += (int)pow(a,len-i-1)*data[2];break;
                case '3':inda += (int)pow(a,len-i-1)*data[3];break;
                case '4':inda += (int)pow(a,len-i-1)*data[4];break;
                case '5':inda += (int)pow(a,len-i-1)*data[5];break;
                case '6':inda += (int)pow(a,len-i-1)*data[6];break;
                case '7':inda += (int)pow(a,len-i-1)*data[7];break;
                case '8':inda += (int)pow(a,len-i-1)*data[8];break;
                case '9':inda += (int)pow(a,len-i-1)*data[9];break;
                case 'a':
                case 'A':inda += (int)pow(a,len-i-1)*data[10];break;
                case 'b':
                case 'B':inda += (int)pow(a,len-i-1)*data[11];break;
                case 'c':
                case 'C':inda += (int)pow(a,len-i-1)*data[12];break;
                case 'd':
                case 'D':inda += (int)pow(a,len-i-1)*data[13];break;
                case 'e':
                case 'E':inda += (int)pow(a,len-i-1)*data[14];break;
                case 'f':
                case 'F':inda += (int)pow(a,len-i-1)*data[15];break;
                default:break;
                }
            }
            if(inda==0)
                stack[++top]='0';
            while(inda)
            {
                stack[++top]=suju[inda%b];
                inda=inda/b;
            }
            while(top>=0)
                printf("%c",stack[top--]);
            printf("\n");
        }
        return 0;
    }
    /**************************************************************
        Problem: 1118
        User: Carvin
        Language: C++
        Result: Accepted
        Time:10 ms
        Memory:1108 kb
    ****************************************************************/

    Java代码(RE,我也不知道为什么!贴在这,提供一种方法:)

    import java.util.Scanner;
    import java.math.*;
    public class Main{
        public static void main(String[] args){
            int radixdata[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
            char radixarray[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
            long a,b;
            int i,j,k;
            String str;
            Scanner cin=new Scanner(System.in);
            while(cin.hasNext()){
                a=cin.nextLong();
                str=cin.nextLine();
                b=cin.nextLong();
                String result="";
                char strarray[]=str.toCharArray();
                int len=strarray.length;
                long radix=0;
                for(i=0;i<len;i++){
                    switch(strarray[i])
                    {
                    case '0':break;
                    case '1':
                        radix+=(int)Math.pow(a,len-i-1)*radixdata[1];break;
                        //Tenradix+=(int)pow(a,x)*data[1];break;
                    case '2':
                        radix+=(int)Math.pow(a,len-i-1)*radixdata[2];break;
                    case '3':
                        radix+=(int)Math.pow(a,len-i-1)*radixdata[3];break;
                    case '4':
                        radix+=(int)Math.pow(a,len-i-1)*radixdata[4];break;
                    case '5':
                        radix+=(int)Math.pow(a,len-i-1)*radixdata[5];break;
                    case '6':
                        radix+=(int)Math.pow(a,len-i-1)*radixdata[6];break;
                    case '7':
                        radix+=(int)Math.pow(a,len-i-1)*radixdata[7];break;
                    case '8':
                        radix+=(int)Math.pow(a,len-i-1)*radixdata[8];break;
                    case '9':
                        radix+=(int)Math.pow(a,len-i-1)*radixdata[9];break;
                    case 'a':
                    case 'A':
                        radix+=(int)Math.pow(a,len-i-1)*radixdata[10];break;
                    case 'b':
                    case 'B':
                        radix+=(int)Math.pow(a,len-i-1)*radixdata[11];break;
                    case 'c':
                    case 'C':
                        radix+=(int)Math.pow(a,len-i-1)*radixdata[12];break;
                    case 'd':
                    case 'D':
                        radix+=(int)Math.pow(a,len-i-1)*radixdata[13];break;
                    case 'e':
                    case 'E':
                        radix+=(int)Math.pow(a,len-i-1)*radixdata[14];break;
                    case 'f':
                    case 'F':
                        radix+=(int)Math.pow(a,len-i-1)*radixdata[15];break;
                    default:break;
                    }//switch
                }//for
                if(0==radix)
                    System.out.print(0);
                while(radix>0){
                    //System.out.print(radix%b);
                    result=radixarray[(int) (radix%b)]+result;
                    radix/=b;
                }
                System.out.println(result);
                //System.out.println();
            }//while
        }//main
    }//Main
    /**************************************************************
        Problem: 1118
        User: Carvin
        Language: Java
        Result: Runtime Error
    ****************************************************************/

    再贴一段网上的神代码(Java):

    import static java.lang.System.out;
        import java.io.BufferedInputStream;
        import java.util.Scanner;
        public class Main {
                static Scanner in = new Scanner(new BufferedInputStream(System.in));
                private static String string;
                private static int a, b;
                public static void main(String args[]) {
                        while (in.hasNext()) {
                                a = in.nextInt();
                                string = in.next();
                                b = in.nextInt();
                                out.println(Integer.toString(Integer.valueOf(string, a), b)
                                                .toUpperCase());
                        }
                }
        }
    /**************************************************************
        Problem: 1118
        User: Carvin
        Language: Java
        Result: Accepted
        Time:300 ms
        Memory:27516 kb
    ****************************************************************/