大数计算

 

大数计算:

       由于编程语言提供的基本数值数据类型表示的数值范围有限,不能满足较大规模的高精度数值计算,因此需要利用其他方法实现高精度数值的计算,于是产生了大数运算。

 

大数计算简析:

       大数计算实现的理论是,首先提取输入值赋予指定String字符串。

       通过String.charAt(index)提取每一位的值,赋予int数组.

       然后求相乘每一位的值和进位。

       直到最后每一位都求出来。

 

代码实现:

       

  1 import java.awt.*;

  2 import java.awt.event.ActionEvent;

  3 import java.awt.event.ActionListener;

  4 import javax.swing.*; 

  5 public class DashuCf extends JFrame {

  6     

  7     

  8     JLabel l1=new JLabel("FirstNum ");

  9     JLabel l2=new JLabel("SecondNum");

 10     JLabel l3=new JLabel("Result   ");

 11     JTextField FirstNum = new JTextField(20); 

 12     JTextField SecondNum = new JTextField(20); 

 13     JTextField Result = new JTextField(20); 

 14     JTextField Check = new JTextField(20); 

 15     JButton CountButton = new JButton("Count");     

 16     public static void dS(JTextField a,JTextField b,JTextField c,JTextField d){

 17         

 18         d.setText("");

 19         String fc=a.getText();

 20         String sc=b.getText();

 21         int[] f,s;

 22         f = new int[fc.length()];

 23         s = new int[sc.length()];    

 24         for(int i=0; i<fc.length();i++){

 25                if((int)fc.charAt(i)>=48&&(int)fc.charAt(i)<58)

 26                  f[fc.length()-1-i]=(int)fc.charAt(i)-48;

 27                else

 28                {

 29                    d.setText("The number of FirstNum is invalide!!!");

 30                    return;

 31                }

 32         }

 33        for(int i=0; i<sc.length();i++){

 34             

 35            if((int)sc.charAt(i)>=48&&(int)sc.charAt(i)<58)

 36              s[sc.length()-1-i]=(int)sc.charAt(i)-48;

 37            else

 38            {

 39                d.setText("The number of SecondNum is invalide!!!");

 40                return;

 41            }

 42                

 43         }       

 44        int max=s.length+f.length;

 45        int key=0;

 46        int[] biaoji,out;

 47        biaoji = new int[max+3];

 48        out = new int[max+3];

 49        

 50        for(int i=0;i<max;i++){

 51            biaoji[i]=0;

 52            out[i]=0;

 53        }

 54        

 55        for(int i=0;i<max;i++){

 56            

 57            key=biaoji[i]; 

 58            for(int m=0;m<=i;m++){

 59                

 60                if((m<f.length)&&((i-m)>=0)&&((i-m)<s.length))

 61                key=f[m]*s[i-m]+key;

 62               

 63            }

 64            out[i]=key%10;

 65           biaoji[i+1]=((key-out[i])/10)%10+biaoji[i+1];

 66           biaoji[i+2]=((key-out[i]-out[i+1]*10)/100)%10+biaoji[i+2];

 67           biaoji[i+3]=((key-out[i]-out[i+1]*10-out[i+2]*100)/1000)%10+biaoji[i+3];

 68            

 69        }

 70        String result="";

 71        for(int i=max-1;i>=0;i--){

 72            

 73            if(!(i==max-1&&out[i]==0))

 74            {  

 75                result=result+out[i];}

 76        }

 77        c.setText(result);

 78     }

 79     public DashuCf()  

 80     {                     

 81         CountButton.addActionListener(new CountAction());

 82         Check.setForeground(new Color(108, 2, 10));

 83         setLayout(new GridLayout(0,2,10,5));

 84         setTitle("大数乘法"); 

 85         getContentPane().add(l1);

 86         getContentPane().add(FirstNum);

 87         getContentPane().add(l2);

 88         getContentPane().add(SecondNum);

 89         getContentPane().add(l3);

 90         getContentPane().add(Result);

 91         getContentPane().add(Check);

 92         getContentPane().add(CountButton);      

 93         setSize(600, 200);  

 94         setVisible(true);  

 95     } 

 96 class CountAction implements ActionListener {

 97         

 98         public void actionPerformed(ActionEvent e) {

 99             dS(FirstNum,SecondNum,Result,Check);

100         }

101     }

102 

103 public static void main(String argv[]){

104     new DashuCf();

105 }

106 

107 }

 

效果演示:

大数计算

 

                                   输入正确的数值

大数计算

 

                                  输入非法数值时

 

你可能感兴趣的:(计算)