Problem 5.Special Numbers?
Здравейте, исках да попитам за задача 5-та от втората лекция - Data Types and Methods.Не разбирам частта с while-цикъла, ако може някой да разясни ще е супер. Ето го и кода: http://pastebin.com/m1LuWjNK .
Здравейте, исках да попитам за задача 5-та от втората лекция - Data Types and Methods.Не разбирам частта с while-цикъла, ако може някой да разясни ще е супер. Ето го и кода: http://pastebin.com/m1LuWjNK .
Здравей, в while цикъла сумираш отделните цифри на числото. За целта използваш деление с остатък (оператор %) и целочислено деление (оператор /). Деление с остатък означава, че взимаш само остатъкът от делението (13 % 10 = 3), а целочислено - че взимаш само цялата част (13 / 10 = 1).
За да получиш цифрата на единиците на дадено число, рябва да разделиш с остатък на 10. За да получиш всяка следваща цифра, делиш целочислено на 10, а след това отново делиш на 10 с остатък.
Ето и един пример: числото 163: 163 % 10 = 3 -> прибавяме 3 към сумата: sum = 3. 163 / 10 = 16; 16 % 10 = 6 -> прибавяме 6 към сумата: sum = 3 + 9; 16 / 10 = 1, 1 % 10 = 1 -> прибавяме 1 към сумата: sum = 3 + 6 + 1.
Операторът += е кратък запис на събиране. Вместо да пишеш sum = sum + 3, записваш само sum += 3.
Тук е обяснена разликата между целочислено деление и деление с остатък и е обяснен алгоритъма за намиране на цифрите на дадено число.
Мисля,че го разбрах.Благодаря!
Здравей колега,
Ако трябва да говорим за стилизиран код бих ти препоръчала моя. Разгледай го дано да ти помогне.
Колега, този код наистина е стилизиран, но дава верен резултат само за двуцифрените числа. Станат ли трицифрени, вече сумата не е коректна.
Здравей, indieza,
добре изглежда кодът ти. Бих ти дал още няколко препоръки:
Браво, че се стараеш да пишеш стилизиран код.
ПРОДЪЛЖАВАЙ ТАКА!
Поздрави!
По принцип и мен малко ме обърка, но като се замислих излезе логично - ето и моето решение
с for loop определям броя завъртания, които ще се направят от 1 до n. с while loop сумата от цифрите на брояча - sum пази стойностите от % 10 - ("вземам" цифрите една по една) а с / 10 - заличавам предходната стойност и така докато не стигне 0. излизам от цикъла и проверявам дали сумата отговаря на условията и променям булевата стйност. Занулявам sum. Принтирам по условието и операцията се повтаря докато не се изпълни условието на for - loop.
using System;
public class Program
{
public static void Main()
{
Console.WriteLine(5 / 10);
var n = int.Parse(Console.ReadLine());
var check = false;
var temp =0;
//
var sum =0;
for(int i =1; i <=n; i++)
{
temp = i;
while(temp!=0)
{
sum +=(temp % 10);
temp/=10;
}
if(sum == 5 || sum == 7 || sum ==11)
{
check = true;
}
else
check = false;
sum =0;
Console.WriteLine(i+" -> "+check);
}
}
}
Здравейте,
колегите са обеснили много добре частта с while-цикъла, но по принцип тази задача може да се реши и без този цикъл.
Ако на някой му е интересно, ето го моето решение : https://pastebin.com/v5SS0R4S
Здравей!
Решението ти без while цикъл е вярно само за числа с до 2 цифри. Да минава проверката на Judge, но явно тестовете са само за двуцифрени числа, а firstDigit дори е излишно . При въвеждане на 3-цифрено число резултатите са грешни защото:
int firstDigit = middleDigit / 10;
дели 2-рата цифра от числото на 10, което винаги дава целочислен резултат 0. Първата цифра от 3-цифрено число би била коректна ако е сметната така :
int firstDigit = (num / 100) % 10; или само: int firstDigit = num / 100; за трицифрени числа
Дори и така сметките няма да са валидни за 4 и повече цифрени числа, тъй като сумата е сбор от 3 променливи - т.е. само на 3 цифри!