HDOJ 2100 Lovekey

Problem Description
XYZ-26进制数是一个每位都是大写字母的数字。 A、B、C、…、X、Y、Z 分别依次代表一个0 ~ 25 的数字,一个 n 位的26进制数转化成是10进制的规则如下
A0A1A2A3…An-1 的每一位代表的数字为a0a1a2a3…an-1 ,则该XYZ-26进制数的10进制值就为

m = a0 * 26^(n-1) + a1 * 26^(n-2) + … + an-3* 26^2 + an-2*26 + an-1

一天vivi忽然玩起了浪漫,要躲在学校的一个教室,让枫冰叶子去找,当然,她也知道枫冰叶子可不是路痴,于是找到了XYZ的小虾和水域浪子帮忙,他们会在vivi藏的教室的门口,分别写上一个XYZ-26进制数,分别为 a 和 b,并且在门锁上设置了密码。显然,只有找到密码才能打开锁,顺利进入教室。这组密码被XYZ的成员称为lovekey。庆幸的是,枫冰叶子知道lovekey是 a的10进制值与b的10进制值的和的XYZ-26进制形式。当然小虾和水域浪子也不想难为枫冰叶子,所以a 和 b 的位数都不会超过200位。
例如第一组测试数据
a = 0 * 26^5+0* 26^4+ 0* 26^3+ 0 *26^2 + 3*26 + 7 = 85
b = 1*26^2 + 2*26 + 4 = 732
则 a + b = 817 = BFL

Input
题目有多组测试数据。
每组测试数据包含两个值均为的XYZ-26进制数,每个数字的每位只包含大写字母,并且每个数字不超过200位。

Output
输出XYZ的lovekey,每组输出占一行。

Sample Input
AAAADH BCE
DRW UHD
D AAAAA

Sample Output
BFL
XYZ
D

注意必须是大数!!!!!!!
可以利用java中的大数来做:
java.math.BigDecimal和java.math.BigInteger
AC代码:

1import java.math.BigDecimal; 2import java.math.BigInteger; 3import java.util.Scanner; 4 5public class Main { 6 7 8 9 public static void main(String[] args) { 10 Scanner sc = new Scanner(System.in); 11 final char A[] =new char[26]; 12 for(int i=0;i<26;i++){ 13 A[i]=(char)(i+65); 14 } 15 final char B[] =new char[26]; 16// System.out.println((int)('0')); 17 for(int i=0;i<10;i++){ 18 B[i]=(char)(i+48); 19 } 20 for(int i=10;i<26;i++){ 21 B[i]=(char)(i+87); 22 } 23 24// for(int i=0;i<26;i++){ 25 26 27 28// System.out.println(A[i]); 29// } 30// for(int i=0;i<26;i++){ 31 32 33 34// System.out.println(B[i]); 35// } 36 37 while(sc.hasNext()){ 38 String a = sc.next(); 39 String b = sc.next(); 40// System.out.println(a); 41// System.out.println(b); 42 BigInteger sumNumber = new BigInteger("0"); 43 BigDecimal p1 = new BigDecimal(1); 44 BigDecimal aBig = new BigDecimal(0); 45 BigDecimal bBig = new BigDecimal(0); 46 int k=0; 47 //System.out.println(aNumber.toString(10)); 48 //System.out.println(bNumber.toString(10)); 49 50 for(int i=0;i<a.length();i++){ 51 for(int j=0;j<A.length;j++){ 52 if(a.charAt(i)==A[j]){ 53 k=j; 54 break; 55 } 56 } 57 BigDecimal p =p1; 58 for(int h=0;h<a.length()-i-1;h++){ 59 p = p.multiply(new BigDecimal(26)); 60 } 61 p = p.multiply(new BigDecimal(k)); 62 //System.out.println("p="+p); 63 64 65 aBig = aBig.add(p); 66 67 } 68 69 70 for(int i=0;i<b.length();i++){ 71 for(int j=0;j<A.length;j++){ 72 if(b.charAt(i)==A[j]){ 73 k=j; 74 break; 75 } 76 } 77 BigDecimal p =p1; 78 for(int h=0;h<b.length()-i-1;h++){ 79 p = p.multiply(new BigDecimal(26)); 80 } 81 p = p.multiply(new BigDecimal(k)); 82 //System.out.println("p="+p); 83 84 85 bBig = bBig.add(p); 86 87 } 88 //System.out.println(aBig); 89 //System.out.println(bBig); 90 91 aBig = aBig.add(bBig); 92 93 String m= aBig.toPlainString(); 94 95 sumNumber = new BigInteger(m,10); 96 97 98 String sumString = sumNumber.toString(26); 99 100 //System.out.println(sumString); 101 102 for(int i=0;i<sumString.length();i++){ 103 for(int j=0;j<B.length;j++){ 104 if(sumString.charAt(i)==B[j]){ 105 k=j; 106 break; 107 } 108 } 109 System.out.print(A[k]); 110 111 } 112 System.out.println(); 113 114 } 115 116 } 117 118}

本文同步分享在 博客“谙忆”(CSDN)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏

评论区

加载中...

相关推荐

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

python刷题-特殊的数字

问题描述  153是一个非常特殊的数,它等于它的每位数字的立方和,即153111555333。编程求所有满足这种条件的三位十进制数。输出格式  按从小到大的顺序输出满足条件的三位十进制数,每个数占一行。foriinrange(100,1000):astr(i)0bstr(i)1c

python刷题-进制转换

十六进制转八进制问题描述  给定n个十六进制正整数,输出它们对应的八进制数。输入格式  输入的第一行为一个正整数n(1<n<10)。  接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。输出格式  输出n行,每行为输入对应的八进制正整数。  【注意】  输入的十六进制数不会有

mysql中like用法

like的通配符有两种%(百分号):代表零个、一个或者多个字符。\(下划线):代表一个数字或者字符。1\.name以"李"开头wherenamelike'李%'2\.name中包含"云",“云”可以在任何位置wherenamelike'%云%'3\.第二个和第三个字符是0的值wheresalarylike'\00%'4\

FLV文件格式

1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.