Advertisement
Guest User

Untitled

a guest
Jan 21st, 2019
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.55 KB | None | 0 0
  1. public class Division {
  2.  
  3.     private StringBuffer result = new StringBuffer();
  4.     private StringBuffer quotient = new StringBuffer();
  5.     private StringBuffer reminder = new StringBuffer();
  6.  
  7.     public String createLongDivision(int dividend, int divisor) {
  8.  
  9.         dividend = Math.abs(dividend);
  10.         divisor = Math.abs(divisor);
  11.  
  12.         if (divisor == 0) {
  13.  
  14.             throw new IllegalArgumentException("Divisor can't be 0");
  15.  
  16.         }
  17.  
  18.         if (dividend < divisor) {
  19.  
  20.             throw new IllegalArgumentException("Dividend can't be less than divisor");
  21.  
  22.         }
  23.  
  24.         String[] digits = String.valueOf(dividend).split("");
  25.         Integer reminderNumber;
  26.         Integer multiplyResult;
  27.         Integer divisorDigit = calculateDigit(divisor);
  28.         Integer mod;
  29.  
  30.         for (int i = 0; i < digits.length; i++) {
  31.  
  32.             reminder.append(digits[i]);
  33.             reminderNumber = Integer.parseInt(reminder.toString());
  34.  
  35.             if (reminderNumber >= divisor) {
  36.  
  37.                 mod = reminderNumber % divisor;
  38.                 multiplyResult = reminderNumber / divisor * divisor;
  39.  
  40.                 String lastReminder = String.format("%" + (i + 2) + "s", "_" + reminderNumber.toString());
  41.                 result.append(lastReminder).append("\n");
  42.  
  43.                 String multiply = String.format("%" + (i + 2) + "d", multiplyResult);
  44.                 result.append(multiply).append("\n");
  45.  
  46.                 Integer tab = lastReminder.length() - calculateDigit(multiplyResult);
  47.                 result.append(createDivisor(reminderNumber, tab)).append("\n");
  48.  
  49.                 quotient.append(reminderNumber / divisor);
  50.  
  51.                 reminder.replace(0, reminder.length(), mod.toString());
  52.                 reminderNumber = Integer.parseInt(reminder.toString());
  53.  
  54.             }
  55.  
  56.  
  57.             if (i == digits.length - 1) {
  58.  
  59.                 result.append(String.format("%" + (i + 2) + "s", reminderNumber.toString())).append("\n");
  60.  
  61.             }
  62.         }
  63.  
  64.         modifyResultView(dividend, divisor);
  65.         return result.toString();
  66.  
  67.     }
  68.  
  69.     private String createDivisor (Integer reminderNumber, Integer tab) {
  70.  
  71.         return assemblyString(tab, ' ') + assemblyString(calculateDigit(reminderNumber), '-');
  72.  
  73.     }
  74.  
  75.     private int calculateDigit(int i) {
  76.  
  77.         return (int) Math.log10(i) + 1;
  78.  
  79.     }
  80.  
  81.     private String assemblyString(int numberOfSymbols, char symbol) {
  82.  
  83.         StringBuilder string = new StringBuilder();
  84.  
  85.         for (int i = 0; i < numberOfSymbols; i++) {
  86.  
  87.             string.append(symbol);
  88.  
  89.         }
  90.  
  91.         return string.toString();
  92.  
  93.     }
  94.  
  95.     private void modifyResultView(Integer dividend, Integer divisor) {
  96.  
  97.         int[] index = new int[3];
  98.  
  99.         for (int i = 0, j = 0; i < result.length(); i++) {
  100.  
  101.             if (result.charAt(i) == '\n') {
  102.  
  103.                 index[j] = i;
  104.  
  105.                 j++;
  106.  
  107.             }
  108.  
  109.             if (j == 3) {
  110.  
  111.                 break;
  112.  
  113.             }
  114.  
  115.         }
  116.  
  117.         int tab = calculateDigit(dividend) + 1 - index[0];
  118.         result.insert(index[2], assemblyString(tab, ' ') + "│" + quotient.toString());
  119.         result.insert(index[1], assemblyString(tab, ' ') + "│" + assemblyString(quotient.length(), '-'));
  120.         result.insert(index[0], "│" + divisor);
  121.         result.replace(1, index[0], dividend.toString());
  122.  
  123.     }
  124.  
  125.     public static void main(String[] args) {
  126.  
  127.         Division division = new Division();
  128.  
  129.         System.out.println(division.createLongDivision(1034, 15));
  130.  
  131.         }
  132.  
  133. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement