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

来源:互联网 发布:铣削力计算软件 编辑:程序博客网 时间:2024/06/16 19:07
题目描述:

    求任意两个不同进制非负整数的转换(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****************************************************************/



0 0
原创粉丝点击