zoukankan      html  css  js  c++  java
  • 大数的除法 不使用BigInteger Java实现

    import java.util.Arrays;
    
    public class Solution {
        public void div(String a, String b) {
    
            char[] chara = a.toCharArray();
            char[] charb = b.toCharArray();
            int[] numa = new int[a.length()];
            int[] numb = new int[b.length()];
            for (int i = 0; i < charb.length; i++) {
               numb[i] = charb[i]-'0';
         //      System.out.print(""+numb[i]);
            }
            System.out.println("");
            for (int i = 0; i < chara.length; i++) {
                numa[i] = chara[i]-'0';
             System.out.print(""+numa[i]);
            }
            System.out.println("");
            int[] div = new int [1000];
            int count = 0;
            while(compare(numa,numb)>0){
                numa= div(numa,numb);
                addSelf(div,count);
                
            }
            StringBuffer sb =  new StringBuffer();
            sb.append(""+div+"  ");
            for (int i = 0; i < numa.length; i++) {
                sb.append(""+numa[i]);
            }
            System.out.println(""+sb);
        }
    
        private void addSelf(int[] div, int count) {
            if (div[div.length-1]!=9) {
                div[div.length-1]++;
            }else{
                int i = div.length-1;
                while (div[i]==9){
                    div[i] = 0;
                    i--;
                }  ;
                if (div[i]==0) {
                    count++;
                }else{
                    div[i] ++;
                }
                    
                
                }
            
            
        }
    
        private int[] div(int[] numa, int[] numb) {
            for (int i = 0; i < numb.length; i++) {
                int tmpa = numa[numa.length-i-1];
                int tmpb = numb[numb.length-i-1];
                int sub =  tmpa-tmpb;
                int count = numa.length-1;
                if (sub>=0) {
                    numa[numa.length-i-1] = sub;
                }else{
                    numa[numa.length-i-1] = sub+10;
                    count =numa.length- i-1-1;
                    while(numa[count]==0){
                        numa[count] =9;
                        count--;
                        
                    }
                    numa[count]--;
                    if (numa[0]==0) {
                        numa = Arrays.copyOfRange(numa,1, numa.length);
                                
                    }
                }
                
            }
            
            for (int i = 0; i < numa.length; i++) {
            //    System.out.print(""+numa[i]);
            }
            //System.out.println("");
            return numa;
        }
    
        int compare(int[] numa, int[] numb) {
            if (numa.length<numb.length) {
                return -1;
            }else if (numa.length>numb.length) {
                return 1;
            }else{
                for (int i = 0; i < numb.length; i++) {
                    if (numa[i]>numb[i]) {
                        return 1;
                    }
                    if (numa[i]<numb[i]) {
                        return -1;
                    }
                }
                return 0;
            }
            
        }
    public static void main(String[] args) {
        Solution solution = new Solution();
        String a = "1234578901234567890123456789";
        String b = "1";
        solution.div(a, b);
    }
    }
  • 相关阅读:
    POJ 3660 Cow Contest (floyd求联通关系)
    POJ 3660 Cow Contest (最短路dijkstra)
    POJ 1860 Currency Exchange (bellman-ford判负环)
    POJ 3268 Silver Cow Party (最短路dijkstra)
    POJ 1679 The Unique MST (最小生成树)
    POJ 3026 Borg Maze (最小生成树)
    HDU 4891 The Great Pan (模拟)
    HDU 4950 Monster (水题)
    URAL 2040 Palindromes and Super Abilities 2 (回文自动机)
    URAL 2037 Richness of binary words (回文子串,找规律)
  • 原文地址:https://www.cnblogs.com/liuchuanwu/p/4803011.html
Copyright © 2011-2022 走看看