Софтуерно Инженерство
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
Основи на програмирането 13/06/2015 12:36:01
Filkolev avatar Filkolev 4428 Точки

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

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

3
Effektus avatar Effektus 9 Точки

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

1
Filkolev avatar Filkolev 4428 Точки

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 51 Точки

Здравейт 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 51 Точки

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

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

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