Advertisement
stanevplamen

02.03.08.TwoBigSumOwn

Jul 16th, 2013
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.85 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Threading;
  4.  
  5. class TwoBigSum
  6. {
  7.     // creates a number between 0 and 9
  8.     static int GiveNumber()
  9.     {
  10.         Thread.Sleep(5); // for faster work with many digits, please comment this line
  11.         Random rnd = new Random();
  12.         int random = rnd.Next(0, 9);
  13.         return random;
  14.     }
  15.  
  16.     static void Main()
  17.     {
  18.         Console.Write("Please enter the number of digits of the first number: ");
  19.         int firstDigits = int.Parse(Console.ReadLine());
  20.         Console.Write("Please enter the number of digits of the second number: ");
  21.         int secondDigits = int.Parse(Console.ReadLine());
  22.         // load first array
  23.         int[] firstArray = new int[firstDigits];
  24.         for (int i = 0; i < firstDigits; i++)
  25.         {
  26.             firstArray[i] = GiveNumber();
  27.         }
  28.  
  29.         // load second array
  30.         int[] secondArray = new int[secondDigits];
  31.         for (int i = 0; i < secondDigits; i++)
  32.         {
  33.             secondArray[i] = GiveNumber();
  34.         }
  35.  
  36.         // load the result list
  37.         List<int> summedDigits = AddBigNumbers(firstArray, secondArray);
  38.  
  39.         Console.WriteLine("The first Number is: ");
  40.         Print(firstArray);
  41.         Console.WriteLine("The second Number is: ");
  42.         Print(secondArray);
  43.  
  44.         Console.WriteLine("The sum is: ");
  45.         PrintList(summedDigits);
  46.     }
  47.  
  48.     private static List<int> AddBigNumbers(int[] firstArray, int[] secondArray)
  49.     {
  50.         int firstStep = Math.Min(firstArray.Length, secondArray.Length);
  51.         int secondStep = Math.Max(firstArray.Length, secondArray.Length);
  52.         List<int> summedDigits = new List<int>();
  53.         int reserveAdd = 0;
  54.  
  55.         for (int i = 0; i < firstStep; i++)
  56.         {
  57.             int currentDigitSum = firstArray[i] + secondArray[i];
  58.             int currentRemainder = currentDigitSum % 10;
  59.             if (reserveAdd + currentRemainder < 10)
  60.             {
  61.                 summedDigits.Add(reserveAdd + currentRemainder);
  62.                 reserveAdd = currentDigitSum / 10;
  63.             }
  64.             else
  65.             {
  66.                 summedDigits.Add(0);
  67.                 reserveAdd = currentDigitSum / 10 + 1;
  68.             }
  69.         }
  70.         for (int i = firstStep + 1; i < secondStep; i++)
  71.         {
  72.             if (secondStep == firstArray.Length)
  73.             {
  74.                 int currentDigitSum = firstArray[i];
  75.  
  76.                 if (reserveAdd + currentDigitSum < 10)
  77.                 {
  78.                     summedDigits.Add(reserveAdd + currentDigitSum);
  79.                     reserveAdd = currentDigitSum / 10;
  80.                 }
  81.                 else
  82.                 {
  83.                     summedDigits.Add(0);
  84.                     reserveAdd = currentDigitSum / 10 + 1;
  85.                 }
  86.             }
  87.             else
  88.             {
  89.                 int currentDigitSum = secondArray[i];
  90.  
  91.                 if (reserveAdd + currentDigitSum < 10)
  92.                 {
  93.                     summedDigits.Add(reserveAdd + currentDigitSum);
  94.                     reserveAdd = currentDigitSum / 10;
  95.                 }
  96.                 else
  97.                 {
  98.                     summedDigits.Add(0);
  99.                     reserveAdd = currentDigitSum / 10 + 1;
  100.                 }
  101.             }
  102.         }
  103.         if (reserveAdd > 0)
  104.         {
  105.             summedDigits.Add(reserveAdd);
  106.         }
  107.         return summedDigits;
  108.     }
  109.  
  110.     private static void Print(int[] array)
  111.     {
  112.         for (int i = array.Length - 1; i >= 0; i--)
  113.         {
  114.             Console.Write(array[i]);
  115.         }
  116.         Console.WriteLine();
  117.     }
  118.  
  119.     private static void PrintList(List<int> summedDigits)
  120.     {
  121.         for (int i = summedDigits.Count - 1; i >= 0; i--)
  122.         {
  123.             Console.Write(summedDigits[i]);
  124.         }
  125.         Console.WriteLine();
  126.     }
  127. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement