Advertisement
Guest User

Untitled

a guest
Nov 19th, 2018
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.75 KB | None | 0 0
  1. import java.util.*;
  2. import static java.lang.System.out;
  3.  
  4. class Test
  5. {
  6. public static void main(String[] args)
  7. {
  8. java.util.Scanner in = new java.util.Scanner (System.in);
  9. System.out.println("Mata in två naturliga heltal!");
  10. System.out.print("Tal 1: ");
  11. String tal1=in.next();System.out.print("Tal 2: ");
  12. String tal2=in.next();
  13.  
  14. System.out.println(tal1+"\t"+tal2);
  15.  
  16. String svar = Addition(tal1, tal2);
  17. System.out.println(svar);
  18. show(tal1, tal2, svar, '+');
  19.  
  20. String svar2 = subtract(tal1, tal2);
  21. System.out.println(svar2);
  22. show(tal1, tal2, svar2, '-');
  23.  
  24.  
  25. }
  26. public static String Addition(String tal1, String tal2)
  27. {
  28. StringBuilder sBuilder = new StringBuilder(); //En stringbuilder
  29. int length = tal1.length();
  30. tal2 = matchLength(length, tal2); //Skickar iväg andra strängen för att matcha längd
  31. int carry = 0;
  32. int i = 0;
  33.  
  34. if(tal2.length() > length) //Kollar om längden på second är längre än first.
  35. {
  36. length = tal2.length();
  37. tal1 = matchLength(length, tal1); //Matchar längderna
  38. }
  39.  
  40. tal1 = new StringBuilder(tal1).reverse().toString(); //Vänder på strängen för en enklare while-loop
  41. tal2 = new StringBuilder(tal2).reverse().toString(); //-||-
  42.  
  43. while(i < length || carry == 1) //Körs så länge i är mindre än längden och carry == 1
  44. {
  45. int temp; //Deklarerar en int för värdet som skall vara värdet av additionen
  46. if(i < length)
  47. {
  48. //Adderar alla värden
  49. temp = (tal1.charAt(i) - 48) //Genom att ta karaktärens värde i ascii minus 48 får man "rätta" värdet
  50. + (tal2.charAt(i) - 48)
  51. + carry; //Lägger till carry
  52. }else
  53. {
  54. temp = carry;
  55. }
  56.  
  57. carry = 0;
  58.  
  59. if(temp > 9) //Om temp är större än tio behöver vi en carry
  60. {
  61. carry = 1;
  62. sBuilder.append(temp % 10); //Modulus på temp med 10 och ger lägger till resten
  63. }else
  64. {
  65. sBuilder.append(temp);
  66. }
  67. i++;
  68. }
  69. return new StringBuilder(sBuilder.toString()).reverse().toString(); //Vänder och returnerar strängen som byggdes
  70. }
  71.  
  72. public static String matchLength(int length, String tal)
  73. {
  74. StringBuilder sBuilder = new StringBuilder(); //Stringbuilder
  75. while(sBuilder.length() < (length - tal.length())) //Medan stringbuilders längd är mindre än längd - en av talens längder
  76. {
  77. sBuilder.append(0); //Lägg till 0or
  78. }
  79. sBuilder.append(tal); //Lägg till talet
  80. return sBuilder.toString(); //Returnera strängen
  81. }
  82.  
  83. public static void show(String num1, String num2, String result, char operator) {
  84. // set an appropriate length on numbers and result
  85. int len1 = num1.length();
  86. int len2 = num2.length();
  87. int len = result.length();
  88. int maxLen = Math.max(Math.max(len1, len2), len);
  89. num1 = setLen(num1, maxLen - len1);
  90. num2 = setLen(num2, maxLen - len2);
  91. result = setLen(result, maxLen - len);
  92.  
  93. // show the expression
  94. out.println(" " + num1);
  95. out.println("" + operator + "" + num2);
  96. for (int i = 0; i < maxLen + 2; i++) {
  97. out.print("-");
  98. }
  99. out.println();
  100. out.println(" " + result + "\n");
  101. }
  102. public static String setLen(String s, int nofSpaces) {
  103. StringBuilder sb = new StringBuilder(s);
  104. for (int i = 0; i < nofSpaces; i++)
  105. sb.insert(0, " ");
  106. return sb.toString();
  107. }
  108.  
  109. public static String subtract(String num1, String num2) {
  110. StringBuilder diff = new StringBuilder();
  111. int carry = 0;
  112.  
  113. // Prepare numbers with right format for subtraction
  114. int length = num1.length();
  115. num2 = matchLength(length, num2);
  116.  
  117. // Make subtraction considering every single char as an int
  118. for (int i = num1.length() - 1; i >= 0; i--) {
  119. int fig1 = Character.getNumericValue(num1.charAt(i)) - carry;
  120. int fig2 = Character.getNumericValue(num2.charAt(i));
  121. int partDiff;
  122. if (fig1 >= fig2) {
  123. partDiff = fig1 - fig2;
  124. carry = 0;
  125. } else {
  126. partDiff = (fig1 + 10) - fig2;
  127. carry = 1;
  128. }
  129. diff.append(String.valueOf(partDiff));
  130. }
  131. diff.reverse();
  132. return diff.toString();
  133. }
  134.  
  135.  
  136.  
  137.  
  138. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement