Advertisement
stefanpu

Sum of array of digits

Feb 13th, 2013
38
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace _08_SumOfArrayOfDigits
  8. {
  9.     class Program
  10.     {
  11.         static void PrintArray(List<int> list)
  12.         {            
  13.             //list.Reverse();
  14.             foreach (var item in list)
  15.             {
  16.                 Console.Write(item);
  17.             }
  18.         }
  19.         static List<int> SumDigits(byte[] firstArray, byte[] secondArray)
  20.         {
  21.             List<int> resultArray = new List<int>();
  22.             int remainder = 0;
  23.             int biggerLength = firstArray.Length < secondArray.Length ?
  24.                 secondArray.Length : firstArray.Length;
  25.  
  26.             int firstArrayLength = firstArray.Length;
  27.             int secondArrayLength = secondArray.Length;
  28.            
  29.  
  30.             for (int index = 0; index < biggerLength ; index++)
  31.             {
  32.                 //Така можеш с минимални промени да започнеш достъпването на масивите
  33.                 //от последния им елемент към първия.
  34.                 int firstArrayDigit = firstArrayLength - index -1 >= 0 ?
  35.                     firstArray[firstArrayLength - index -1] : 0;
  36.                 int secondArrayDigit = secondArrayLength - index -1 >= 0 ?
  37.                     secondArray[secondArrayLength - index -1] : 0;
  38.  
  39.                 int digit = firstArrayDigit + secondArrayDigit + remainder;
  40.                 remainder = digit / 10;
  41.  
  42.                 //Можеш да позлваш  resultArray.Insert(0, digit) вместо Add
  43.                 // Тогава няма да имаш нужда да обръщаш масива по-долу.
  44.                 resultArray.Add(digit % 10);
  45.             }
  46.  
  47.             if (remainder > 0)
  48.             {
  49.                 //Ако използваш Insert горе, трябва да го изпозлваш и тук
  50.                 resultArray.Add(remainder);
  51.             }
  52.             //Обърни масива тук, а не в "PrintArray" метода. Защо? Ами :
  53.             // Първо: В идеалният случай, методът ти трябва да  прави едно нещо -
  54.             //да принтира, например.
  55.             //Твоят метод реално прави две неща: обръща масив(1) и тогава го принтира(2).
  56.             //Второ: Името на метода ти е заблуждаващо - казва се "PrintArray", а
  57.             // името му би трябвало да бъде: "ReverseAndPrintArray"
  58.             //Ако някой друг (или ти след време) реши да го преизползва ще очаква от
  59.             // метода един резултат, но ще получи друг.
  60.             resultArray.Reverse();
  61.  
  62.             return resultArray;
  63.         }
  64.         static void Main()
  65.         {
  66.             byte[] num1 = { 1,6 };
  67.             byte[] num2 = { 5 };
  68.  
  69.             PrintArray(SumDigits(num1, num2));
  70.             Console.WriteLine();
  71.         }
  72.        
  73.     }
  74. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement