标签:
求任意两个不同进制非负整数的转换(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 ****************************************************************/
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 ****************************************************************/
标签:
原文地址:http://blog.csdn.net/carvin_zh/article/details/45403697