the_beginner Ответов: 3

Почему на первой итерации n1 получает значение "49999" вместо "50000"


Я написал небольшой код, чтобы перевернуть пятизначное число, но на первой итерации я получаю неправильное значение, и я не могу понять, почему.
<pre>#include<stdio.h>
#include<iostream>
#include<cmath>

using namespace std;

main()
{
    int n, temp, n1;
    cout<<"\nEnter the no.: ";
    cin>>n;
    temp=n;
    n1=0;
    int i=0;
    while(i<5)
    {
        if(temp<10)
            n1=n1+temp;
        else
        {
            n1=n1+temp%10*pow(10,4-i);
            temp=temp/10;
        }
        cout<<"\ni= "<<i<<" temp= "<<temp<<" n1= "<<n1;
        i++;
    }
    cout<<"\n"<<n1;

    return 0;
}


Что я уже пробовал:

Я попытался получить последнюю цифру, получив напоминание, разделив его на 10, а затем умножив значение на 10 pow (4-i)

Mohibur Rashid

n1=n1+temp%10*pow(10,4-i);
Что это такое?

3 Ответов

Рейтинг:
23

OriginalGriff

Потому что pow это операция с плавающей запятой, а не целое число, и это может привести к нечетным результатам.
Но тебе это не нужно pow вообще, простая петля сделает это:

main()
    {
    int input, output, digit, i;
    cout << "\nEnter the no.: ";
    cin >> input;
    output = 0;
    for (i = 0; i < 5; i++)
        {
        digit = input % 10;
        output = (output * 10) + digit;
        input = input / 10;
        }
    cout << output << "\n";
    return 0;
    }
Пожалуйста, обратите внимание, насколько легче понять код, когда вы используете "правильные" имена переменных: отдельные символы могут быть быстро набраны, но они очень быстро запутываются!


CPallini

5.

the_beginner

Большое спасибо,я буду держать комментарий для имен переменных в уведомлении.

Рейтинг:
0

CPallini

Вы также можете написать

#include <iostream>
using namespace std;
int main()
{
  unsigned int n;

  cout << "please enter the number" << endl;
  cin >> n;

  if ( n == 0)
     cout << "0" << endl;
  else
  {
    while ( n )
    {
      cout << (n % 10);
      n /= 10;
    }
    cout << endl;
  }
}


the_beginner

Спасибо за ответ

CPallini

Добро пожаловать.

Рейтинг:
0

Patrice T

Цитата:
Я написал небольшой код, чтобы перевернуть пятизначное число, но на первой итерации я получаю неправильное значение, и я не могу понять, почему.

Существует инструмент, который позволяет вам видеть, что делает ваш код, его имя-отладчик.
Это отличный инструмент обучения, потому что он показывает вам реальность, и вы можете увидеть, какие ожидания соответствуют реальности.
Когда вы не понимаете, что делает ваш код или почему он делает то, что делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволяет вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения, это невероятный инструмент обучения.

Отладчик-Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010-YouTube[^]
Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.


the_beginner

Спасибо за совет

Patrice T

Добро пожаловать.