Проблем със задача от 06. Four digits


0

Имам следния проблем: Второти условие на тази задача гласи: "Prints on the console the number in reversed order: dcba (in our example 1102) and prints the reversed number." 

Принципно реших това условие с while loop, но когато input-ът завършва на 0 ми създава проблем, защото:

1. Когато имам първа цифра в int, която е 0 при компилиране тя не се изписва

2. Ако направя проверка дали там е нула и го изпиша като string, то BgCoder не ми дава пълните точки, защото явно не иска string-ове в output-a

Дали има начин за конкатениране на два int-a, за който не се сещам, така че да при проверка и нужда да залепя 0, която да не е string отпред?

Това е моето решение към момента:

using System; namespace FourDigits { class FourDigits { static void Main() { int number = int.Parse(Console.ReadLine()); // Print the sum of the digits of the input number int numberSum = number; int sumSum = 0; while ( numberSum > 0) { sumSum = sumSum + (numberSum % 10); numberSum = numberSum / 10; } // Print the reverse of the input number int numberRev = number; int sumRev = 0; while (numberRev > 0) { int reminder = numberRev % 10; sumRev = (sumRev * 10) + reminder; numberRev = numberRev / 10; } // Puts the last digit of the input number as first and prints it int numberLastFirst = number; int firstDigit = numberLastFirst % 10; numberLastFirst = (firstDigit * 1000) + (numberLastFirst / 10); // Exchange the second and the third digit of the input number int numberSecondThird = number; int digitFourth = numberSecondThird % 10; numberSecondThird /= 10; int digitThird = numberSecondThird % 10; numberSecondThird /= 10; int digitSecond = numberSecondThird % 10; int digitFirst = numberSecondThird / 10; numberSecondThird = ((digitFirst * 1000) + (digitThird * 100) + (digitSecond * 10) + digitFourth); // Print the tasks result Console.WriteLine(sumSum); Console.WriteLine(sumRev); Console.WriteLine(numberLastFirst); Console.WriteLine(numberSecondThird); } } }




Отговори



0

След като си намерил 4те цифри можеш да ги принтираш така: 

Console.WriteLine("{0}{1}{2}{3}", d, c , b, a);

и съответно по какъвто друг начин искаш.

:)


от lllevski (1431 точки)


0

Мерси, колега. Проработи.

Само не разбирам, защо когато му казвах, направи проверка дали ще е 0 отпред и тогава изписвай string 0 и долепено числото не се получаваше. Мислих, че е проблем, че използвам string. Но в твоето решение пак е string, а стана. Хмм.


от mkanovski (552 точки)

0
Не виждам къде е тази проверка. Ти работиш навсякъде с инт и в тези while цикли се опитваш да нагласиш цифрите в числото, но когато една от цифите е 0 ти се прецакват сметките и излиза числото с една цифра по-малко.

от lllevski (1431 точки)


0

Проблемът е, че използваш числа за всичко. В конзолата всичко е стрингове, а ако не е, C# се опитва да го string-оса.

Това би било по-правилно:

string input = Console.ReadLine(); string a = input[0].ToString(); string b = input[1].ToString(); string c = input[2].ToString(); string d = input[3].ToString(); int sum = input[0] + input[1] + input[2] + input[3] - 48*4; Console.WriteLine(sum); Console.WriteLine(d + c + b + a); Console.WriteLine(d + a + b + c); Console.WriteLine(a + c + b + d);


от vasilv (275 точки)


0
Колега супер решение! Само ако може да ми обясниш защо вадим 48*4

от peter_85 (279 точки)

0

Защото input[] връща char, а char се cast-ва към int спрямо ASCII таблицата.

За да получа правилното число в int, изваждам '0' (Chr колоната от таблицата), която се cast-ва като 48 (Dec колоната)) в int.

Можеш да го провериш така:

bool areEqual = '2' - 48 == 2; Console.WriteLine(areEqual);


от vasilv (275 точки)



1

Ето и моят вариант. Забавното е, че сравнен с този на колегата vasilv, при инпут на текст, моят крашва заради цифровия си формат, а стрингосаният вади и буквите според условието... :D

using System; namespace HW06FourDigits { class DigitSchuffle { static void Main() { int n = int.Parse(Console.ReadLine()); int a = ((n / 1000) % 10); int b = ((n / 100) % 10); int c = ((n / 10) % 10); int d = (n % 10); Console.WriteLine(a + b + c + d); Console.WriteLine("{3}{2}{1}{0}" , a , b , c , d); Console.WriteLine("{3}{0}{1}{2}", a, b, c, d); Console.WriteLine("{0}{2}{1}{3}", a, b, c, d); } } }

Поздрави!



0
Може дори да ги кастнеш към байтове :)

от A.Nenov (148 точки)

0
Поздравления колега. Страхотна работа!!!