• 大数计算


    大数计算:

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

    大数计算简析:

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

    效果演示:

                                       输入正确的数值

                                      输入非法数值时

  • 相关阅读:
    HDU 2639 Bone Collector II (01背包,第k解)
    POJ 2184 Cow Exhibition 奶牛展(01背包,变形)
    hihoCoder #1165 : 益智游戏 (挑战赛11 B题)
    UVA 562 Dividing coins 分硬币(01背包,简单变形)
    POJ Charm Bracelet 挑饰品 (常规01背包)
    hiho一下 第四十四周 博弈游戏·Nim游戏(直接公式解)
    UVA 624 CD(01背包,要记录路径)
    118 Pascal's Triangle 帕斯卡三角形 杨辉三角形
    117 Populating Next Right Pointers in Each Node II 每个节点的右向指针 II
    116 Populating Next Right Pointers in Each Node 每个节点的右向指针
  • 原文地址:https://www.cnblogs.com/udld/p/4155579.html
Copyright © 2020-2023  润新知