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
Filkolev avatar Filkolev 4482 Точки

В C# операторът % не е предвиден да работи с числа от тип double.

Другата грешка е в използването на Math.Pow, първият параметър трябва да е числото, а вторият - степента.

3
Effektus avatar Effektus 9 Точки

Ами аз съм записан онлайн и така и не разбрах как точно да повдигна на степен някое число, някой неща остават не до там добре обяснени на тези лекции защото са елементарни за преподавателя и понякога се пропускат, разбирам го това, но това успях да намеря като информация в мрежата.

1
Filkolev avatar Filkolev 4482 Точки

MSDN

public static double Pow(double x, double y)

Return Value: The number x raised to the power y.

1
13/06/2015 12:54:00
Effektus avatar Effektus 9 Точки

Math.Pow не желае да работи с int. Би ли ми написал само формулата в код как ще стане според теб. Благодаря предварително.

0
antonio_rtodorov avatar antonio_rtodorov 74 Точки

Здравейте,

идеята, която мога да ти дам е да разгледаш този пример:

1234 / 10 = 123 (4)

123 / 10 = 12 (3)

12 /10 = 1 (2)

1 / 10 = 0 (1)

П.С. обърни внимание на остатъците как формират числото, което си въвел.

4
bonchodikov avatar bonchodikov 1 Точки

Човече, евала!!! Страхотен съвет. Мерси :) 

0
stiliqnivanov avatar stiliqnivanov 16 Точки

Здравей,

Ето ти едно примерно решение, не съм го компилирал ! Просто го нахвърих на работа, за да схванеш идеята.


      int n=int.Parse(Console.ReadLine());
      int check=int.Parse(Console.ReadLine());
      int digit=0;
      int count=0;
      while(n>0)
      {
          digit=n%10;
          count++;
          if(count==check)
            {
                Console.WriteLine(digit);break;
            }
            n=n/10;

 

Ако не стане с break-ването просто си въведи още 1 променлива ,в който като ти съвпадне брояча да запаметиш digit-а.

Поздрави!

1
Effektus avatar Effektus 9 Точки

Благодаря, направих я. Лек ден!

0
S.Iliev avatar S.Iliev 47 Точки

Здравейт Effektus,

Как точно реши задачата. Можеш ли да постенш сорс кода?

Аз нещо такова написах.

static void Main()
    {

        int number = int.Parse(Console.ReadLine());
        int position = int.Parse(Console.ReadLine());
        int power = position - 1;
        double formula = Math.Pow(10,power);
        int usableNum = (int) formula;

        int nDigit = (number/usableNum)%10;

        Console.WriteLine(nDigit);

    }

С условна конструкция ли изкарвате "-", когато няма такава позиция? Как точно се разбира дали има такава позиция в номера или няма?

 

1
25/06/2015 11:16:01
Effektus avatar Effektus 9 Точки

Ето го моя код:

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());
        int nDigit = number / (int)Math.Pow(10, (n - 1)) % 10;

        if (nDigit != 0)
        {
            Console.WriteLine(nDigit);
        }
        else
        {
            Console.WriteLine('-');
        }
        
    }
}

надявам се да помогне :)

2
S.Iliev avatar S.Iliev 47 Точки

Тъкмо щах да да си дописвам кода в коментара с условната конструкция :), но ме изпревари.

А друг вариант има ли за изписването на "-". Мислех си за тернарен оператор.

PS.С услвната конструкция ми връща и "0" на конзолата, а изхода трябва да е само "-".

 

Ето това съм писал:

int number = int.Parse(Console.ReadLine());
        int position = int.Parse(Console.ReadLine());
        int power = position - 1;
        double formula = Math.Pow(10,power);
        int usableNum = (int) formula;

        int nDigit = (number/usableNum)%10;

        Console.WriteLine(nDigit);

        if (nDigit!=0)
        {
            Console.WriteLine(nDigit);
        }
        else
        {
            Console.WriteLine('-');
        }

 

 

PS. Игнорирай, имам един  Console.WriteLine(nDigit);  в повече!!! :D

Трябва да си събера главата най-накрая. :D

0
25/06/2015 11:27:05
KatyaMarincheva avatar KatyaMarincheva 572 Точки

Здравей Светославе,

целта на тази формула ти е да получиш 10 повдигнато на определена степен: за първата цифра ти трябва 10^1, за втората 10^2, за третата 10^3 и т.н. затова double formula = Math.Pow(formNum, 10); трябва да стане double formula = Math.Pow(10, formNum); като formNum определя на коя степен ще повдигнеш 10.

С тази малка промяна решението ти работи идеално :)

 

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