simonradev

StringMultiplicationOfTwoNumbers

Feb 15th, 2017
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.24 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace SumBigNumbersSecondTry
  8. {
  9.     public class SumBigNumbersSecondTry
  10.     {
  11.         public static void Main()
  12.         {
  13.             string firstInput = ReverseStringNumber(Console.ReadLine().TrimStart('0'));
  14.             string secondInput = ReverseStringNumber(Console.ReadLine().TrimStart('0'));
  15.  
  16.             StringBuilder result = new StringBuilder();
  17.  
  18.             for (int firstSymbol = 0; firstSymbol < firstInput.Length; firstSymbol++)
  19.             {
  20.                 int firstNumber = int.Parse(firstInput[firstSymbol].ToString());
  21.  
  22.                 StringBuilder currSum = new StringBuilder();
  23.                 int remainder = 0;
  24.                 for (int secondSymbol = 0; secondSymbol < secondInput.Length; secondSymbol++)
  25.                 {
  26.                     int secondNumber = int.Parse(secondInput[secondSymbol].ToString());
  27.  
  28.                     int multiplication = firstNumber * secondNumber + remainder;
  29.  
  30.                     int numberToAppend = multiplication % 10;
  31.                     remainder = multiplication / 10;
  32.  
  33.                     currSum.Append(numberToAppend);
  34.  
  35.                     if (remainder != 0 && secondSymbol + 1 == secondInput.Length)
  36.                     {
  37.                         currSum.Append(remainder);
  38.                     }
  39.                 }
  40.  
  41.                 result = SumTwoNumbers(result.ToString(), currSum.ToString().PadLeft((currSum.Length + firstSymbol), '0'));
  42.             }
  43.  
  44.             if (result.ToString() == string.Empty || result.ToString().All(c => c == '0'))
  45.             {
  46.                 Console.WriteLine(0);
  47.  
  48.                 return;
  49.             }
  50.  
  51.             Console.WriteLine(ReverseStringNumber(result.ToString()));
  52.         }
  53.  
  54.         public static StringBuilder SumTwoNumbers(string firstNumber, string secondNumber)
  55.         {
  56.             StringBuilder result = new StringBuilder();
  57.  
  58.             int smallerLen = Math.Min(firstNumber.Length, secondNumber.Length);
  59.             int remainder = 0;
  60.             for (int currNumber = 0; currNumber < smallerLen; currNumber++)
  61.             {
  62.                 int sum = int.Parse(firstNumber[currNumber].ToString()) + int.Parse(secondNumber[currNumber].ToString()) + remainder;
  63.  
  64.                 int numberToAppend = sum % 10;
  65.                 remainder = sum / 10;
  66.  
  67.                 result.Append(numberToAppend);
  68.  
  69.                 if (remainder != 0 && (currNumber + 1) == smallerLen && (firstNumber.Length == secondNumber.Length))
  70.                 {
  71.                     result.Append(remainder);
  72.                 }
  73.             }
  74.  
  75.             if (firstNumber.Length == secondNumber.Length)
  76.             {
  77.                 return result;
  78.             }
  79.  
  80.             for (int currNumber = smallerLen; currNumber < firstNumber.Length; currNumber++)
  81.             {
  82.                 int sum = int.Parse(firstNumber[currNumber].ToString()) + remainder;
  83.  
  84.                 int numberToAppend = sum % 10;
  85.                 remainder = sum / 10;
  86.  
  87.                 result.Append(numberToAppend);
  88.  
  89.                 if (currNumber + 1 == firstNumber.Length && remainder != 0)
  90.                 {
  91.                     result.Append(remainder);
  92.                 }
  93.             }
  94.  
  95.             for (int currNumber = smallerLen; currNumber < secondNumber.Length; currNumber++)
  96.             {
  97.                 int sum = int.Parse(secondNumber[currNumber].ToString()) + remainder;
  98.  
  99.                 int numberToAppend = sum % 10;
  100.                 remainder = sum / 10;
  101.  
  102.                 result.Append(numberToAppend);
  103.  
  104.                 if (currNumber + 1 == secondNumber.Length && remainder != 0)
  105.                 {
  106.                     result.Append(remainder);
  107.                 }
  108.             }
  109.  
  110.             return result;
  111.         }
  112.  
  113.         public static string ReverseStringNumber(string numberToReverse)
  114.         {
  115.             StringBuilder toReturn = new StringBuilder();
  116.             for (int currSymbol = 0; currSymbol < numberToReverse.Length; currSymbol++)
  117.             {
  118.                 toReturn.Append(numberToReverse[numberToReverse.Length - 1 - currSymbol]);
  119.             }
  120.  
  121.             return toReturn.ToString();
  122.         }
  123.     }
  124. }
Advertisement
Add Comment
Please, Sign In to add comment