Ето един подробно описан начин на решаване за тези, които тепърва се сблъскват с този проблем. :)
Loading...
+ Нов въпрос
ZarevRosen avatar ZarevRosen 0 Точки

Strong number problem

Колеги, тук пак нямам 100 от 100 точки, ще хвърлите ли един поглед? Благодаря! Успех!

using System;

namespace basicSintax1
{
    class Program
    {
        static void Main()
        {
            // INITIALIZE NUMBER
            var n = int.Parse(Console.ReadLine());
            var nCopy = n;
            var factoriel = 1;
            while (n <= 0)
            {
                var number = n % 10;
                number /= 10;
                factoriel += n * number;
                n--;
            }
            if (factoriel == nCopy)
            {
                Console.WriteLine("yes");
            }
            else
            {
                Console.WriteLine("no");                                    
            }
        }
    }
}

Тагове:
0
Fundamentals Module
DennisKostadinov avatar DennisKostadinov 16 Точки

Не мисля, че начинът по-който смяташ факториала работи. Пробвай с:

for (int i = 1; i <= n; i++)
            {
                factoriel *= i;
            }

 

1
Ivan.N.Iliev avatar Ivan.N.Iliev 44 Точки

Преработих малко твоя код:

https://pastebin.com/bTV9dvCW

0
VasilK avatar VasilK 39 Точки

Ето едно решение с по различен подход.

 

import java.util.Arrays;
import java.util.Scanner;

public class Strong_Number {

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        int beg = Integer.parseInt(scanner.nextLine());
        String str = Integer.toString(beg);
        int sum_2 = 0;

        for (int i = 0; i < str.length(); i++ ) {
            int sum_1 = 1;
            char x = str.charAt(i);
            int a = Character.getNumericValue(x);
            for (int k = 1; k <= a; k++) sum_1*=k;
         sum_2+= sum_1;
        }
        if (beg == sum_2) System.out.printf("yes");
        else System.out.printf("no");
    }
}

0
ValeriST avatar ValeriST 16 Точки

https://pastebin.com/2wMTRdYH ето и моето решение.Има 2 for цикъла-първия,за да обходим числото и втори,за да добавяме  стойностите   към променлива,с която по-късно проверяваме дали е "yes" или "no"

0
Terter avatar Terter 2 Точки

Поблъсках си главата близо час по задачата, но успях да изкарам 100/100. Малко финикииско решение, но сработи. Това, което правя в програмата е да напиша число като стринг, от него да взема всеки символ и да го превърна в реално число като извадя от него 48 (преди това стойността на символа '1' е 49, на '2' е 50 и тн.). От там на сетне задачата е лесна... един фор цикъл да върти за всяко число и да умножава по формулата, за да получим нещо от сорта '1' '4' '5':  
1 => 1 * 1 = 1 
4 => 1 * 2 * 3 * 4 = 24
5 => 1 * 2 * 3 * 4 * 5 = 120
1 + 24 + 120 = 145

145 == '1' '4' '5'
Парсваме стринга в число и проверяваме дали числото е равно на общия сбор или не.

using System;
{
    class Program
    {
        static void Main()
        {

            string number = Console.ReadLine();
            int total = 0;

            foreach (char ch in number)
            {
                int num = ch-48;
                int factoriel = 1;

                for (var j = 1; j <= num; j++)
                {
                    factoriel *= j;
                }

                total += factoriel;
            }

            int stringToNum = int.Parse(number);

            if (stringToNum == total)
            {
                Console.WriteLine("yes");
            }


            else if (stringToNum != total)
            {
                Console.WriteLine("no");
            }
        }
    }
}

0
14/03/2019 11:23:52
JOHNNY21 avatar JOHNNY21 3 Точки

Ето един подробно описан начин на решаване за тези, които тепърва се сблъскват с този проблем. :)

https://pastebin.com/YehyY5Xb

 

using System;

namespace Task6_StrongNumber
{
    class Program
    {
        static void Main(string[] args)
        {
            int number = int.Parse(Console.ReadLine());//6921
            string numberLenght = number.ToString();//Обръщам числото в String  за да взема дължината му. (Числото 6921 съдържа 4 симбола)
            //lenght = 4
            int sum = 0;


            //Тук въртя цикъл, който ще се завърти толкова пъти, колкото е дължината на числото (В случая 4 пъти)
            for (int digitsCount = 0; digitsCount < numberLenght.Length; digitsCount++)
            {
                //Тук достъпвам чилото което седи на дадена позиция, като от него вадя 48,понеже в ASCII таблицата 0-та е на 48 позиция
                int currentFactorial = (int)(numberLenght.ToString()[digitsCount]) - 48;
                //На първото завъртане взимам стойността "6" , тъй като тя се намира на нулева позиция (В програмирането се брои от 0)
                //На второто завъртане взимам стойността "9" , която се намира на 1ва позиция и тн.

                int currentSum = 1;
                //Дефинирам, че след всяко завъртане currentSum ще е единица, защото всяко число умножено по 0 е 0;


                
                //Тук въртя цикъл, в който за всяко едно число намирам неговият Факториел
                for (int count = currentFactorial; count >= 1; count--)
                {
                    //Тук умножавам предходното число по count, където count e намален с 1ца 
                    //Така след като приключа цикъла ще получа факториела на числото
                    currentSum *= count;
                    //Пример: Ако имам числото 6 то факториел от 6 е : (6 * 5 * 4 * 3 * 2 * 1) = 720

                }

                //Тук събирам получената до момента сума от факториела
                sum = sum + currentSum;

            }

            //След завъртането на всички цикли аз трябва да проверя дали сумата на факториелите е равна на първоначално даденото число
            if (sum == number)
            {
                Console.WriteLine("yes");
            }
            else
            {
                Console.WriteLine("no");
            }
        }
    }
}
 

 

0
04/12/2019 17:09:10
kabalsky avatar kabalsky 27 Точки

Здравейте.

И аз имах проблем с тази задача,

накрая открих че когато ползваме числото 0 , факториала на 0 е 1 или аз така си мисля,

защото след като коригирах това Judge ми даде 100/100.

0
johanni avatar johanni 5 Точки

Ето го моя, дава 100, дано Ви хареса как е написан

using System;

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

            int factorialSum = 0;
            
            while (n > 0)
            {
                int number = n % 10;

                int factorial = 1;

                for (int i = 1; i <= number; i++)
                {
                    factorial *= i;
                }

                factorialSum += factorial;

                n /= 10;              
            }

            if (factorialSum == input)
            {
                Console.WriteLine("yes");
            }
            else
            {
                Console.WriteLine("no");
            }
        }
    }
}
 

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.