package dazhengshu;import java.util.*;
//import java.util.LinkedList; 
class duanlian
{
public static void main(String args[])
{int c[]=new int[100];
int jinwei=0;
int k=0;
int d=0;
int m=0;
//LinkedList stack=new LinkedList();
ArrayList list=new ArrayList();
int a[]={5,4};
int b[]={3,4};
for(int i=a.length-1;i>=0;i--){
for(int j=b.length-1;j>=0;j--){
c[k]=b[i]*a[j];
  k++;
}
}
for( k=0;k<a.length*b.length;k++)
{
System.out.print(c[k]+" ");
}
//for(int i=0;i<c.length;i++){
d=c[0];
int e=d;
while(d>10)
{
d=d/10;
 jinwei=d;
}
 m=e-(d*10);
 
list.add(m);
//}
d=c[1];
e=d;
while(d>10)
{
d=d/10;
jinwei=d;
}
m=e-(d*10);
list.add(m);System.out.println();
for(int i=0;i<c.length;i++)
System.out.println(d);System.out.print(m);}
}大家能不能看懂我的意思,就是把这两个数两两相乘算出来。把高位和低位分离,然后模仿笔算乘法,最后得出结果。不会做了。希望高手帮忙,ps:a数组和b数组的长度可以无限大

解决方案 »

  1.   

    java自带有一个BigInteger
    在src/java/math/目录下
      

  2.   


    public class BIG 
    {
    public static void main(String[] args)
    {
    int [] a={9,9};
    int [] b={2,9};
    int [] c=new int[a.length+b.length];
    int index=0;
    for(index=0;index<c.length;index++)
    {
    c[index]=0;
    }
    for(index=b.length-1;index>=0;index--)
    {
    for(int j=a.length-1;j>=0;j--)
    {
    c[index+j+1]+=b[index]*a[j];
    }
    }
    for(index=c.length-1;index>0;index--)
    {
    c[index-1]+=c[index]/10;
    c[index]=c[index]%10;
    }
         for(index=c.length;index>0;index--)
          System.out.println(c[index-1]);
    }
    }
      

  3.   

    基本实现...不过最开始的0的剔除没有做.可以完善
    public class BIG 
    {
    public static void main(String[] args)
    {
    int [] a={9,9};
    int [] b={1};
    int [] c=new int[a.length+b.length];
    int index=0;
    for(index=0;index<c.length;index++)
    {
    c[index]=0;
    }
    for(index=b.length-1;index>=0;index--)
    {
    for(int j=a.length-1;j>=0;j--)
    {
    c[index+j+1]+=b[index]*a[j];
    }
    }
    for(index=c.length-1;index>0;index--)
    {
    c[index-1]+=c[index]/10;
    c[index]=c[index]%10;
    }
    boolean start=false;
         for(index=0;index<c.length;index++)
         {
          if(c[index]!=0)
           start=true;
          if(start)
          System.out.print(c[index]);
         }
    }
    }
      

  4.   

    看了一下。楼上的这个写法很好哦。谁能帮我解释一下里面的这些index都是干什么的
    c[index+j+1]+=b[index]*a[j];b数组的index是什么意思
    这个for循环又是什么意思
     for(index=c.length-1;index>0;index--)
            {
                c[index-1]+=c[index]/10;
                c[index]=c[index]%10;
            }
    我知道c[index-1]+=c[index]/10;是把高位分离,可是分离以后又是怎么实现进位的,没弄明白,希望指教。谢谢
      

  5.   

    for(int j=a.length-1;j>=0;j--)
                    {
                    c[index+j+1]+=b[index]*a[j];
                    }
    这段代码的意思我明白,可是还没明白具体的实现过程
    比如我想做12*12
    按照我的理解,c数组中应该存入的是2*2,2*1,1*2,1*1;可我把c数组输出的结果却不是这样
      

  6.   

    举个例子吧....
    a=9,9
    b=1,9
    c=0,9,90,81
    然后....
    for(index=c.length-1;index>0;index--) 
            { 
                c[index-1]+=c[index]/10; 
                c[index]=c[index]%10; 
            } 
    比如说当index=3的时候...执行完以后c=0,9,98,1
           index=2.................c=0,18,8,1
           index=1.................c=1,8,8,1      
    自己理解下                
      

  7.   

    a=9,9 
    b=1,9 
    c=0,9,90,81
    就是没明白这个是什么意思,还有。 index=2.................c=0,18,8,1 
           index=1.................c=1,8,8,1 
    index=2的时候那个18是怎么出来的。
      

  8.   

    有谁帮我分析一下啊。我想了好久了。
    发表于:2008-03-28 15:13:397楼 得分:0 
    a=9,9  
    b=1,9  
    c=0,9,90,81 
    就是没明白这个是什么意思,还有。  index=2.................c=0,18,8,1  
           index=1.................c=1,8,8,1  
    index=2的时候那个18是怎么出来的。