Loading...
Effektus avatar Effektus 9 Точки

Problem 4. N-th Digit от 5. Operators-Expressions-and-Statements-Exercises

Колеги помогнете нещо не мога да се спрвя с тази задача, дава ми различен резултат?

Problem 1.       N-th Digit

Write a program that prints the n-th digit of a number (from right to left). If no such digit exists, print a dash "-".

Hints:

  1. Declare three variables (number, n and nDigit).
  2. Read the user input from the console. (int.Parse(Console.ReadLine());).
  3. Find the n-th digit of the number by using the formulae (  The word mod means modular division (or the operator % in C#).
  4. Print the result on the console (Console.WriteLine(area));).

Number  n  result

2174      3     1

169       2      6

46          4     -

Ето моя код:


using System;

class NthDigit
{
    static void Main()
    {
        Console.Write("Pleace enter one number: ");
        int number = int.Parse(Console.ReadLine());
        Console.Write("Pleace enter n-th digit of a number: "); 
        int n = int.Parse(Console.ReadLine());
        double nDigit = number / Math.Pow((n - 1), 10) % 10;
        Console.WriteLine(nDigit);
    }
}

Тагове:
0
Programming Basics 13/06/2015 12:36:01
Al3xFx avatar Al3xFx 33 Точки

По следния начин работи и е доста оптимизирано:

static void Main(string[] args)
    {
        int number = int.Parse(Console.ReadLine());
        int position = int.Parse(Console.ReadLine());
        int lastNDigit = number;
        int lastNCounter = 0;
        for (int i = 0; i < position; i++)
        {
            lastNCounter = number % 10;
            number = number / 10;
        }

        Console.WriteLine(lastNCounter);

    }

 

2
PavelManahilov avatar PavelManahilov 216 Точки

Колега, както е коментирано по-нагоре, с този вариант който си дал ти, няма да е напълно вярно с условието на задачата, а именно ако позицията която е подадена е по-голяма от цифрите на въведеното число,програмата трябва да връща "-" , а в твоя случай връща 0

1
Al3xFx avatar Al3xFx 33 Точки

Моя грешка, но въпреки това, този проблем се оправя с най - простата проверка:
 

static void Main(string[] args)
    {
        int number = int.Parse(Console.ReadLine());
        int position = int.Parse(Console.ReadLine());
        int lastNCounter = 0;
        for (int i = 0; i < position; i++)
        {
            lastNCounter = number % 10;
            number = number / 10;
        }

        if (number / position <= 0)
        {
            Console.WriteLine("-");
        }
        else
        {
            Console.WriteLine(lastNCounter);
        }

    }

 

1
13/09/2015 16:32:33
PavelManahilov avatar PavelManahilov 216 Точки

Ами тази проверка не работи при числа започващи с цифра по-малка от позицията. На база на това което изчетох по-нагоре тази проверка би трябвало да върши работа 

int digitLength = number.ToString().Length;
.
.
.
.
if (digitLength < position)

 

0
13/09/2015 20:43:35
Cwetkoyy avatar Cwetkoyy 3 Точки

Това е моето решение на задачата:

 static void Main()
        {
            
            int number = int.Parse(Console.ReadLine());
            int n = int.Parse(Console.ReadLine());
            int subScript = (int)Math.Pow(10, n-1);

            int nDigit = (number / subScript ) % (10);
            
            if (nDigit != 0)
            {
                Console.WriteLine(nDigit);
            }
            else
            {
                Console.WriteLine('-');
            }
        }

Дано да помогне на някого! :)

1
22/10/2015 18:31:28
TonislavAtanasov avatar TonislavAtanasov 86 Точки

Чудно. Имаш си условие. Имаш си формула, няма защо да се занимаваш с глупости. Браво!

1
PavelManahilov avatar PavelManahilov 216 Точки

Cwetkoyy , Здравей, когато имаш цифра 0 в числото, например 108 и искаш да извадиш нея програмата ти няма да работи коректно

1
22/10/2015 22:47:41
TonislavAtanasov avatar TonislavAtanasov 86 Точки

Много правилно!
Можеш да разбереш дали съществува такава цифра като просто провериш дали number > subScript.
Нещо такова:

if (number >= subScript)
{
    Console.WriteLine((number / subScript ) % 10);
}
else
{
    Console.WriteLine("-");
}

Не съм го тествал, но трябва да работи. Пробвай формулата с няколко различни числа (наум или на хартия) ако не схващаш веднага зависимостта. Аз лично така направих и май го схванах.
Поздрави!

1
Cwetkoyy avatar Cwetkoyy 3 Точки

Прави сте, моя е грешката, твоя код TonislavAtanasov е сполучлив. :)

0
tzvete avatar tzvete 0 Точки

Ето и моето решение:

using System;

namespace Uprajnenie4
{
    class Uprajnenie4
    {
        static void Main(string[] args)
        {
            double number = double.Parse(Console.ReadLine());
            double n = double.Parse(Console.ReadLine());
            //double a = Math.Pow(n, -1);
            double nDigit = (int)((number / (Math.Pow(10, (n - 1))) % 10));
            Console.WriteLine("{0}", nDigit);
            
        }
    }
}

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