ZOJ-1272

来源:互联网 发布:php计算三角形面积 编辑:程序博客网 时间:2024/06/06 01:46

大数模拟。。字符串和数字互转,即使用了JAVA还是好麻烦。。注意z字符的处理,转化为26进制,因为给出的字母进制没有0,我加了0来表示,比如说z可以表示为a0,到最后的时候转回来

import java.math.BigInteger;import java.util.HashMap;import java.util.Map;import java.util.Scanner;public class Main{static final Map<Character, BigInteger> map = new HashMap<Character, BigInteger>();static final BigInteger TWENTY_SIX = BigInteger.valueOf(26);static final BigInteger ZERO = BigInteger.valueOf(0);static void init(){for (char c = 'a'; c <= 'z'; c++)map.put(c, BigInteger.valueOf(c + 1 - 'a'));}static BigInteger toNumber(String s){BigInteger res = BigInteger.valueOf(0);for (char c : s.toCharArray())res = res.multiply(TWENTY_SIX).add(map.get(c));return res;}static String toStr(BigInteger num){String res = "";while (!num.equals(ZERO)){BigInteger[] bb = num.divideAndRemainder(TWENTY_SIX);num = bb[0];int rem = bb[1].intValue();res += rem == 0 ? '0' : (char) (rem - 1 + 'a');}return res;}static String toZstr(String s){StringBuilder sb = new StringBuilder();char[] ch = s.toCharArray();for (int i = 0; i < ch.length; i++){char c = ch[i];if (c == '0' && i + 1 < ch.length){sb.append('z');if (ch[i + 1] == 'a')ch[i + 1] = '0';elsech[i + 1]--;}else if (c != '0')sb.append(c);}return sb.reverse().toString();}static void printNumber(String s){for (int i = 0; i < s.length(); i++){System.out.print(s.charAt(i));if ((s.length() - 1 - i) > 0 && (s.length() - 1 - i) % 3 == 0)System.out.print(',');}}public static void main(String[] args){init();Scanner sc = new Scanner(System.in);while (true){String line = sc.nextLine().trim();if ("*".equals(line))break;if (Character.isDigit(line.charAt(0))){System.out.format("%-22s", toZstr(toStr(new BigInteger(line))));printNumber(line);}else{System.out.format("%-22s", line);printNumber(toNumber(line).toString());}System.out.println();}sc.close();}}


0 0
原创粉丝点击