zoukankan      html  css  js  c++  java
  • 大数加减法

    计算机处理的各种数据类型都有个范围,超出范围的就处理不了。

    如果做超大数运算加减乘除,普通方法肯定是不行的,那么我们遇到大数的运算怎么处理呢?今天介绍一种大数加减乘除运算的方法

    思路:

    1. 将两个特大的整数利用字符数组作为存储介质。

    2. 逐位计算 遍历结果逢十进一。

    3. 对存储结果的数组进行翻转处理。

    下面上代码:

     1 public class LargeIntSub {
     2     public static void main(String[] args) {
     3         
     4         String a="6789";
     5         String b="123";
     6         int []pa=stringToInts(a);
     7         int []pb=stringToInts(b);
     8         String result_sub=sub(pa,pb);
     9         System.out.println("sub result is:"+result_sub);
    10     }
    11     
    12     public static int[] stringToInts(String s){
    13         int[] n = new int[s.length()]; 
    14         for(int i = 0;i<s.length();i++){
    15         n[i] = Integer.parseInt(s.substring(i,i+1));
    16         }
    17         return n;
    18     }
    19     
    20     public static String sub(int []a,int []b){
    21         StringBuffer sb=new StringBuffer();
    22         boolean flag=false;
    23         if(a.length<b.length){
    24             int c[]=a;
    25             a=b;b=c;
    26             flag=true;
    27         }
    28         int a_len= a.length-1;
    29         int b_len=b.length-1;
    30         int degrade=0;
    31         while(a_len>=0||b_len>=0){
    32             int temp=0;
    33             if(a_len>=0&&b_len>=0){
    34                 if((a[a_len]-degrade)<b[b_len]){
    35                     temp=a[a_len]+10-b[b_len]-degrade;
    36                     degrade=1;
    37                 }else{
    38                     temp=a[a_len]-b[b_len]-degrade;
    39                 }
    40             }else if(a_len>=0){
    41                 temp=a[a_len]-degrade;
    42                 degrade=0;
    43             }
    44             sb.append(temp+"");
    45             
    46             a_len--;b_len--;
    47         }
    48         if(flag){
    49             return getNum(sb.append("-").reverse());
    50         }
    51         return getNum(sb.reverse());
    52     }
    53     public static String getNum(StringBuffer sb){
    54         while(sb.length() > 1 && sb.charAt(0) == '0') {
    55             sb.deleteCharAt(0);
    56         }
    57         return sb.toString();
    58     }
    59 
    60 }
  • 相关阅读:
    .Net Remoting浅释
    初级SQL开发汇总指南
    WPF Navigation导航
    WPF Button的背景图片设置
    2015/9/20 Python基础(16):类和实例
    2015/9/19 Python基础(15):变量作用域及生成器
    2015/9/18 Python基础(14):函数式编程
    2015/9/17 Python基础(13):函数
    2015/9/15 Python基础(12):模块和包
    2015/9/10 Python基础(11):错误和异常
  • 原文地址:https://www.cnblogs.com/clarke157/p/8686009.html
Copyright © 2011-2022 走看看