主要思路:
十进制为例个位:10百位:10*10千位:10^3
那么这个题就是:个位:2百位:2*3千位:2*3*5
算法:
1.将输入转化为10进制
2.计算
3.转化为火星文输出
4.over
import java.util.*; import java.math.*; public class Main { static BigInteger pritab[]=new BigInteger[25]; public static void main(String[] args) { // TODO 自动生成的方法存根 primeTable(); Scanner cin=new Scanner(System.in); pritab[0]=BigInteger.valueOf(1); String str1,str2; while(cin.hasNext()) { str1=cin.next(); str2=cin.next(); if(str1==str2 && str1=="0")break; try{//第一次除0异常了 System.out.println(transString(calNumber(str1).add(calNumber(str2)))); }catch(Exception e){ System.exit(0); } } } static String transString(BigInteger num){ String str=""; int i; for(i=0;i<25;++i){ if(num.compareTo(pritab[i]) < 0)break; } for(i--;;--i){ str+=num.divide(pritab[i]).toString(); BigInteger arr[]=num.divideAndRemainder(pritab[i]); num=arr[1]; str+=","; if(i==1){ str+=arr[1].toString();break; } } return str; } static BigInteger calNumber(String str){ BigInteger sum=BigInteger.valueOf(0); String [] arr=str.split(","); for(int i=0;i<arr.length;++i){ BigInteger a=new BigInteger(arr[i]); sum=sum.add(a.multiply(pritab[arr.length-i-1])); } return sum; } static void primeTable() { int k=1; for(int i=2;i<1000;++i) { int mark=1; if(k>=25)break; for(int j=2;j*j<=i;++j){ if(i%j == 0){ mark=0;break; } } if(mark == 1)pritab[k++]=BigInteger.valueOf(i); } for(int i=2;i<25;++i){ pritab[i]=pritab[i].multiply(pritab[i-1]); } } }