Професионална програма
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