您的位置:首页 > 编程语言 > C语言/C++

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

2015-04-30 23:59 190 查看
题目描述:
求任意两个不同进制非负整数的转换(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
****************************************************************/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: