 + Нов въпрос Vesolini 6 Точки

## 02. From Left to The Right Data Types and Variables - More Exercise

Здравейте банда ! Може ли да ми помогнете да открия грешката си - съдията ми дава 25/100, а честно казано не виждам къде греша ?

## 2.From Left to The Right

You will receive number which represent how many lines we will get as an input. On the next N lines, you will receive a string with 2 numbers separated by single space. You need to compare them. If the left number is greater than the right number, you need to print the sum of all digits in the left number, otherwise print the sum of all digits in the right number.

### Examples

 Input Output 2 1000 2000 2000 1000 2 2 4 123456 2147483647 5000000 -500000 97766554 97766554 9999999999 8888888888 46 5 49 90
Тагове:
0
26/05/2019 16:27:46 Iv_Konov 357 Точки

Здравей,

Коригирай и за двете числа:

sum += Math.Abs(numbers) % 10;

и си готов..

Допълнително може да опростиш решението с:

long biggerNum = Math.Max(intArr, intArr);

Поздрави,

Иван

0
26/05/2019 16:53:08 VasilKotsev 804 Точки

Имаш повтарящ се код, който си реве да го изнесеш в метод. Също това деление не е най-оптималния вариант за решението на тази задача защото губиш CPU Cycles в while-а с тези модулни и целочислени деления. Вземи числото като низ и просто го обхождай. Ползвай Math.Abs() защото ще имаш разминаване иначе в общата сума на цифрите.

``````namespace SandBox
{
using System;
using System.Linq;

public class EntryPoint
{
public static void Main()
{

for (int i = 0; i < numberOfLines; i++)
{
.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)
.Select(long.Parse)
.ToArray();

long leftNumber = currentLineNumbers;
long rightNumber = currentLineNumbers;

var currentSum = leftNumber > rightNumber
? CalculateSumDigitsOfNumber(leftNumber)
: CalculateSumDigitsOfNumber(rightNumber);

Console.WriteLine(currentSum);

}
}

public static double CalculateSumDigitsOfNumber(long number)
{
double sum = 0D;
var numberAsString = Math.Abs(number).ToString();

foreach (var @char in numberAsString)
{
sum += char.GetNumericValue(@char);
}

return sum;
}
}
}``````

0 Nikolay.Bratoev91 3 Точки

Ето и мойто решение на тази задача:

https://pastebin.com/fw1PfAw1

0 Lachezar.Ivanov 14 Точки

Здравейте,

ето едно решение без масиви, което е дълго, но работи:

{

for (int i = 0; i < linesNumber; i++)
{
string leftNumber = "";
string rightNumber = "";
int count = 0;

for (int j = 0; j < input.Length - 1; j++)
{
char symbol = input[j];
if (symbol != ' ')
{
leftNumber += symbol;
count++;
}
else
{
break;
}
}
for (int k = count + 1; k < input.Length; k++)
{
char symbol = input[k];
rightNumber += symbol;
}
long left = long.Parse(leftNumber);
long right = long.Parse(rightNumber);

long maxNumber = Math.Max(left, right);
long sum = 0;
while (Math.Abs(maxNumber) > 0)
{
sum += maxNumber % 10;
maxNumber /= 10;
}
Console.WriteLine(Math.Abs(sum));
}
}

0 Nay46 0 Точки

Ето и едно мое решение , което ми дава 100 от 100 , дано е полезно .

using System;

namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{

for (int i = 1; i <= inputNumber; i++)
{
string stringBeforeSpace = input.Substring(0, input.IndexOf(" "));
string stringAfterSpace = input.Substring(input.IndexOf(" ") + 1);
long numLeft = ( long.Parse(stringBeforeSpace));
long numRight = ( long.Parse(stringAfterSpace));

long maxNumber = Math.Max(numLeft, numRight);
long sum = 0;
while (Math.Abs(maxNumber) > 0)
{
sum += maxNumber % 10;
maxNumber /= 10;
}
Console.WriteLine(Math.Abs(sum));

}

}
}
}

0 fanya.karamfilova 4 Точки

Необходимо е да бъдат заменени типовете от long на BigInteger, за да се получи резултат 100/100.

Особеното е, че при BigInteger не мпже да се използват Math Method.

Ако искаме да получим абсолютната стойност на дадена променлива (input) синтаксиса е следният:

BigInteger absoluteValue = BigInteger.Abs(input)

0