Advertisement
Alyks

Untitled

Oct 23rd, 2019
283
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.53 KB | None | 0 0
  1. package com.company;
  2.  
  3. import java.io.FileReader;
  4. import java.io.FileWriter;
  5. import java.io.IOException;
  6. import java.util.Scanner;
  7.  
  8. public class Main {
  9.     static String getNumberFromSeq(String[] seq) {
  10.         String result = "0";
  11.         for(String el : seq) {
  12.             el = el.trim();
  13.             result = sum(result, el);
  14.         }
  15.         return result;
  16.     }
  17.  
  18.     static String[] makeSameLength(String num1, String num2) {
  19.         int zerosCount = Math.abs(num1.length() - num2.length());
  20.         for (int i = 0; i < zerosCount; i++) {
  21.             if (num1.length() < num2.length())
  22.                 num1 = "0" + num1;
  23.             else
  24.                 num2 = "0" + num2;
  25.         }
  26.         String[] arr = {num1, num2};
  27.         return arr;
  28.     }
  29.  
  30.     static void showSequence(String[] seq) {
  31.         for(String el : seq)
  32.             System.out.print(el);
  33.         System.out.println("");
  34.     }
  35.  
  36.     static String sum(String num1, String num2) {
  37.         String[] nums = makeSameLength(num1, num2);
  38.         num1 = nums[0];
  39.         num2 = nums[1];
  40.         byte memory = 0;
  41.         String sequense = "";
  42.         for (int i = num1.length() - 1; i >= 0; i--) {
  43.             byte el1 = (byte) Character.getNumericValue(num1.charAt(i));
  44.             byte el2 = (byte) Character.getNumericValue(num2.charAt(i));
  45.             byte result = (byte) (el1 + el2 + memory);
  46.             byte units = (byte) (result % 10);
  47.             if (i != 0) {
  48.                 memory = (byte) (result / 10);
  49.                 sequense = units + sequense;
  50.             } else
  51.                 sequense = result + sequense;
  52.         }
  53.         return sequense;
  54.     }
  55.  
  56.     public static void main(String[] args) {
  57.         System.out.println("Данная программа находит последовательность, представляющую сумму двух натуральных чисел, заданных своими последовательностями\n");
  58.         boolean notCorrect = true;
  59.         boolean noException;
  60.         Scanner scan = new Scanner(System.in);
  61.         while (notCorrect) {
  62.             noException = true;
  63.             System.out.println("Введите путь до файла, в котором находятся последовательности чисел, либо его имя, если файл находится в одной директории с программой");
  64.             String filePath = scan.nextLine();
  65.             if (!filePath.contains(".txt"))
  66.                 filePath += ".txt";
  67.             String[] seq1 = {};
  68.             String[] seq2 = {};
  69.             String num1 = "0";
  70.             String num2 = "0";
  71.             try (FileReader fr = new FileReader(filePath)) {
  72.                 Scanner frScan = new Scanner(fr);
  73.                 seq1 = frScan.nextLine().split(",");
  74.                 seq2 = frScan.nextLine().split(",");
  75.             } catch (IOException err) {
  76.                 System.out.println("Произошла ошибка при чтении файла. Убедитесь, что такой файл существует, либо проверьте имя файла.");
  77.                 noException = false;
  78.             }
  79.  
  80.             if (noException) {
  81.                 System.out.println("Последовательности, записанные в файле:");
  82.                 showSequence(seq1);
  83.                 showSequence(seq2);
  84.                 num1 = getNumberFromSeq(seq1);
  85.                 num2 = getNumberFromSeq(seq2);
  86.                 System.out.println("Получившиеся числа: " + num1 + " и " + num2);
  87.                 String sequence = sum(num1, num2).replaceAll("^0+", "");
  88.                 if (num1.matches("^\\d+$") && num2.matches(("^\\d+$"))) {
  89.                     System.out.println("Результат: " + sequence);
  90.                     try (FileWriter fw = new FileWriter("output.txt", false)) {
  91.                         fw.write("Результат: " + sequence);
  92.                     } catch (IOException err) {
  93.                         System.out.println("Произошла ошибка при попытке записи результата в файл");
  94.                     }
  95.                     System.out.println("Результат сохранен в файл output.txt");
  96.                     notCorrect = false;
  97.                 } else
  98.                     System.out.println("Файл должен состоять из последовательности натуральных чисел");
  99.             }
  100.         }
  101.     }
  102. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement