码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-05-01 09:27:14      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:

题目描述:

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



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

标签:

原文地址:http://blog.csdn.net/carvin_zh/article/details/45403697

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!