Advertisement
stefanpu

Sum of array of digits

Feb 13th, 2013
43
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.93 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 _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.             //Твоят метод реално прави две неща: обръща масив(1) и тогава го принтира(2).
  55.             //Второ: Името на метода ти е заблуждаващо - казва се "PrintArray", а
  56.             // името му би трябвало да бъде: "ReverseAndPrintArray"
  57.             resultArray.Reverse();
  58.  
  59.             return resultArray;
  60.         }
  61.         static void Main()
  62.         {
  63.             byte[] num1 = { 1,6 };
  64.             byte[] num2 = { 5 };
  65.  
  66.             PrintArray(SumDigits(num1, num2));
  67.             Console.WriteLine();
  68.         }
  69.        
  70.     }
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement