【HDOJ】1314 Numerically Speaking
学了几天的Java了,终于独立A了一道大数计算。感觉还得练Java啊。
1 import java.util.Scanner; 2 import java.math.BigInteger; 3 import java.lang.StringBuilder; 4 5 public class Main { 6 public static void main(String[] args) { 7 Scanner cin = new Scanner(System.in); 8 while (cin.hasNextLine()) { 9 String line = cin.nextLine(); 10 char l0 = line.charAt(0); 11 if (l0 == '*') 12 break; 13 if (l0>='0' && l0<='9') { 14 StringBuilder builder = new StringBuilder(); 15 BigInteger x = new BigInteger(line); 16 BigInteger div = new BigInteger("26"); 17 BigInteger[] vals = new BigInteger[2]; 18 while (x.compareTo(BigInteger.ZERO) != 0) { 19 vals = x.divideAndRemainder(div); 20 char ch = (char)(vals[1].intValue()+96); 21 builder.append(ch); 22 x = vals[0]; 23 } 24 builder.reverse(); 25 String ans = new String(builder.toString()); 26 System.out.print(ans); 27 int l = ans.length(); 28 while (l < WIDTH) { 29 System.out.print(' '); 30 ++l; 31 } 32 } else { 33 int length = line.length(); 34 System.out.print(line); 35 int l = length; 36 while (l < WIDTH) { 37 System.out.print(' '); 38 ++l; 39 } 40 BigInteger div = new BigInteger("26"); 41 BigInteger sum = new BigInteger(String.valueOf((int)(line.charAt(length-1))-96)); 42 for (int i=length-2; i>=0; --i) { 43 // System.out.print("current sum = "); 44 // System.out.println(sum.toString()); 45 BigInteger tmp = div.multiply(new BigInteger(String.valueOf((int)(line.charAt(i))-96))); 46 sum = sum.add(tmp); 47 div = div.multiply(new BigInteger("26")); 48 } 49 line = new String(sum.toString()); 50 } 51 int length = line.length(); 52 int x = length%3; 53 x = (x==0) ? 3:x; 54 int j = 0; 55 for (int i=0; i<length; ++i) { 56 if (i < x) { 57 System.out.print(line.charAt(i)); 58 } else { 59 if ((j+1)<length && (j%3)==0) { 60 System.out.print(','); 61 } 62 ++j; 63 System.out.print(line.charAt(i)); 64 } 65 } 66 System.out.println(); 67 } 68 } 69 public static void reverse(byte[] bytes, int l) { 70 byte tmp; 71 for (int i=0; i+i<l; ++i) { 72 tmp = bytes[i]; 73 bytes[i] = bytes[l-1-i]; 74 bytes[l-1-i] = tmp; 75 } 76 } 77 static final int WIDTH = 22; 78 }