• 大数计算


    大数计算:

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

    大数计算简析:

           大数计算实现的理论是,首先提取输入值赋予指定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 }

    效果演示:

                                       输入正确的数值

                                      输入非法数值时

  • 相关阅读:
    决策树
    Caffe:深入分析(怎么训练)
    Caffe深度学习计算框架
    Caffe参数交换源码分析
    Net的网络层的构建(源码分析)
    FineTuning机制的分析
    Caffe::Snapshot的运行过程
    AdaBoost算法
    SVM支持向量机
    SMO序列最小最优化算法
  • 原文地址:https://www.cnblogs.com/udld/p/4155579.html
Copyright © 2020-2023  润新知