Софтуерно Инженерство
Loading...
+ Нов въпрос
Vesolini avatar Vesolini 6 Точки

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

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

https://pastebin.com/dbCkG80Y 

 

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
Fundamentals Module 26/05/2019 16:27:46
Iv_Konov avatar Iv_Konov 357 Точки
Best Answer

Здравей, 

 

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

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

и си готов..

 

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

long biggerNum = Math.Max(intArr[0], intArr[1]);

 

Поздрави,

Иван

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

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

namespace SandBox
{
    using System;
    using System.Linq;

    public class EntryPoint
    {
        public static void Main()
        {
            int numberOfLines = int.Parse(Console.ReadLine());

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

                long leftNumber = currentLineNumbers[0];
                long rightNumber = currentLineNumbers[1];

                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
Lachezar.Ivanov avatar Lachezar.Ivanov 14 Точки

Здравейте,

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

        {
            int linesNumber = int.Parse(Console.ReadLine());

            for (int i = 0; i < linesNumber; i++)
            {
                string input = Console.ReadLine();
                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 avatar Nay46 0 Точки

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

using System;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            int inputNumber = int.Parse(Console.ReadLine());

            for (int i = 1; i <= inputNumber; i++)
            {
                string input = Console.ReadLine();
                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 avatar fanya.karamfilova 4 Точки

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

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

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

BigInteger absoluteValue = BigInteger.Abs(input)

0