题目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)。
样例输入:
样例输出:
提示:
可以用字符串表示不同进制的整数。
C++代码:
Java代码(RE,我也不知道为什么!贴在这,提供一种方法:)
再贴一段网上的神代码(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 ****************************************************************/
相关文章推荐
- 【程序21】TestJieCheng.java 题目:求1+2!+3!+...+20!的和 1.程序分析:此程序只是把累加变成了累乘。
- Java常见笔试面试题目解析(二):final与static final变量(引用类型)的引用不变
- java web 笔试题目 整理
- java程序员面试基本题目
- Java高级程序员(5年左右)面试的题目集
- Java程序基础测试题目
- 收藏版:java常见面试题目精讲视频教程!
- Java面试经典题目
- 挑战程序设计竞赛里面的部分题目<用java写的>
- JAVA经典题目3
- 上机题目(初级)- 用数组实现记事本+光标和删除(Java)
- Java 题目:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n
- java经典题目
- java 小题目
- 201301 JAVA题目0-1级
- 2015年第五届蓝桥杯预赛题目JAVA软件开发高职高专组兰顿蚂蚁
- JAVA32道经典算法题目
- 2014年第五届蓝桥杯预赛题目JAVA软件开发高职高专组7
- 小弟求教初级java题目