主要思路:
十进制为例个位: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]);
}
}
}