加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

两个字符串数字相乘(JAVA)

(2009-05-20 03:38:56)
标签:

大数字相乘

字符串数字相乘

杂谈

分类: JAVA

两个字符串数字相乘(JAVA)
import java.util.ArrayList;
import java.util.List;

public class Account {
 public String AccountB(String strA,String strB){
  List<StrNum> numA=getStrNum(strA);
  List<StrNum> numB=getStrNum(strB);
  List<StrNum> numAcc=new ArrayList<StrNum>();
  
  for(int i=0;i<numA.size();i++){
   for(int j=0;j<numB.size();j++){
    int acc=numA.get(i).getVal()*numB.get(j).getVal();
    List<StrNum> numTmp=getStrNum(acc+numA.get(i).getZero()+numB.get(j).getZero());    
    numAcc=StrNumSum(numAcc,numTmp);
   }
  }
  
  return StrNum2String(numAcc);
 }
 public List<StrNum> StrNumSum(List<StrNum> numA,List<StrNum> numB){
  String strA=StrNum2String(numA);
  String strB=StrNum2String(numB);
  String strSum="";
  int i=1;
  int stepNum=0;
  
  while(!(i>strA.length()&&i>strB.length())||stepNum>0){
   int valA=0,valB=0;
   if(i<=strA.length())valA=new Integer(""+strA.charAt(strA.length()-i));
   if(i<=strB.length())valB=new Integer(""+strB.charAt(strB.length()-i));
   
   int iSum=new Integer(valA+valB+stepNum);
   String sSum="0"+iSum;   
   stepNum=new Integer(sSum.substring(0,sSum.length()-1));
   sSum=""+sSum.charAt(sSum.length()-1);
   strSum=sSum+strSum;
   i++;
  }
  
  return getStrNum(strSum);
 }
 
 public List<StrNum> getStrNum(String str){
  List<StrNum> num=new ArrayList<StrNum>();
  
  for(int i=0;i<str.length();i++){
   int iVal=new Integer(""+str.charAt(i));
   int lenOfZero=str.length()-i-1;
   num.add(new StrNum(iVal,lenOfZero));
  }
  return num;
 }
 
 public String StrNum2String(List<StrNum> num){
  if(num==null||num.size()==0)return "";
  String tmp="";
  for(int i=0;i<num.size();i++){
   tmp+=num.get(i).getVal();
  }
  if(num.get(num.size()-1).getLenOfZero()>0){
   tmp+=num.get(num.size()-1).getZero();
  }
  return tmp;
 }
 private class StrNum{
  int val;
  int lenOfZero;
  public StrNum(int val,int lenOfZero) {
   this.val=val;
   this.lenOfZero=lenOfZero;
  }
  public String getZero(){
   String strZero="";
   for(int i=0;i<lenOfZero;i++){
    strZero+="0";
   }
   return strZero;
   
  public int getVal() {
   return val;
  }
  public void setVal(int val) {
   this.val = val;
  }
  public int getLenOfZero() {
   return lenOfZero;
  }
  public void setLenOfZero(int lenOfZero) {
   this.lenOfZero = lenOfZero;
   
 }
 public static void main(String[] args) {
  Account acc=new Account();
  System.out.println(acc.AccountB("152489456578963245635452152489456578963245635452152489456578963245635452152489456578963245635452", "152489456578963245635452152489456578963245635452152489456578963245635452152489456578963245635452"));
 }

}

 

效率很低,只是用最笨的办法做了。别笑话。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有