据说上一次考试的是7进制乘法,练习一下
package info.frady.adv;
import java.math.BigInteger;
/**
* 计算7进制的乘法
*/
public class SevenMul {
static int len=2000;
static int JZ=10;//进制
public static void main(String[] args) {
String stra="555555555555555";
String strb="6666666669999999";
BigInteger ba=new BigInteger(stra);
BigInteger bb=new BigInteger(strb);
System.out.println(ba.multiply(bb).toString());
System.out.println(mul(stra,strb));
}
public static String mul(String a,String b){
int [] arrR=new int[len];
char[] charA=new StringBuffer(a).reverse().toString().toCharArray();//翻转一下,方便计算
char[] charB=new StringBuffer(b).reverse().toString().toCharArray();//
for (int i = 0; i <charA.length ; i++) {
for (int j = 0; j <charB.length ; j++) {//按位乘一下
arrR[i+j]=arrR[i+j]+Integer.parseInt(charA[i]+"")*Integer.parseInt(charB[j]+"");
}
}
for (int i = 0; i <arrR.length ; i++) {//处理一下进位
if(arrR[i]>=JZ){//大于进制了,需要进位
arrR[i+1]=arrR[i+1]+arrR[i]/JZ;//先把进位加到后面一位上
arrR[i]=arrR[i]%JZ;//本位只需要保留余数
}
}
StringBuilder sb=new StringBuilder();
boolean flag=false;
for (int i = arrR.length-1; i >=0 ; i--) {//这个比较无聊,从高位不是0的位置开始就是正式的结果了
if(arrR[i]!=0){
flag=true;
}
if(flag){
sb.append(arrR[i]);
}
}
return sb.toString();
}
}