замените цифру 5 на 6 в числе - PullRequest
1 голос
/ 13 июня 2019

я хочу заменить 5 на 6 и напечатать число

Я хочу заменить 5 на 6 и напечатать номер, но я не могу понять, что не так в моем коде. например, когда я даю 200, выходной сигнал должен быть таким же, то есть 200, но он дает 199, а когда я даю 205 в качестве входных данных вместо 206 в качестве выходных данных, он дает сам 205.

#include<stdio.h>
#include<math.h>
int main()
{
    int n,i=0,r,sum=0;
    while(1){
        printf("\nenter no\n");
        scanf("%d",&n);
        while(n>0)
        {
            r=n%10;
            printf("r is= %d\n",r);
            if(r==5)
            {
                r=6;
            }
            sum=sum+(r*pow(10,i));
            n=n/10;
            i++;
        }
        printf("new no is:\t %d",sum);
        sum=0;i=0;
    }
    return 0;
}

1 Ответ

4 голосов
/ 13 июня 2019

Как уже отмечали другие, это арифметическая проблема с плавающей точкой, значение pow выводит немного меньше, чем желаемое значение (то есть, получая 199.999999 вместо 200, поэтому оно округляется до 199). Есть похожий пост об этом поведении.

В любом случае, если вы хотите, чтобы он работал, вы можете заменить эту строку:

sum=sum+(r*pow(10,i));

с:

 sum=sum+(r*(int)(pow(10,i)+0.5));

и оно будет округлено как раз. Еще раз, это просто быстрое решение, которое поможет вам заставить программу работать, так как я предполагаю, что вы новичок в C.

Но я STRONGLY советую прочитать о арифметическом поведении с плавающей точкой в ​​языках программирования и о том, почему использование pow для целых чисел является плохой практикой в ​​C / C ++.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...