SHOW:
|
|
- or go back to the newest paste.
| 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 | - | // Първо: В идеалният случай, методът ти трябва да прави едно нещо - да принтира например. |
| 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 | } |