получить неожиданный вывод для введенного номера, чтобы найти куб - PullRequest
0 голосов
/ 20 марта 2019

ЗДЕСЬ Я не просто пытаюсь найти только куб любого числа, но я хочу узнать, что введенное число умножается на количество его цифр. например: - 100 умножить на 100 три раза.

Всякий раз, когда я ввожу число, превышающее 3 цифры, я получаю неожиданный вывод в отрицательном числе.

#include<stdio.h>
#include<conio.h>

int cube(int);

void main()
{
    int n,ans;

    printf("enter a number : ");
    scanf("%d" , &n);

   ans=cube(n);
    printf("%d" , ans);
}

int cube(int num)
{
    int count,temp,i,add=1;

    temp=num;
    while(temp>0)
    {
        temp=temp/10;
        count++;
    }
    printf("%d\n" , count);

    for(i=1;i<=count;i++)
    {
        add=add*num;
    }

    return add;
}

Ex: -

введите число: 1000
4
-727379968

Но в то же время, когда я ввожу номер 10101

введите номер: 10101
5
1343051877

Я получаю этот вывод.

1 Ответ

0 голосов
/ 20 марта 2019

Вы получаете переполнение, поскольку 1000 ^ 4 равно 1000000000000, что, безусловно, превышает значение INT_MAX (2147483647 в моей системе).Вы должны использовать соответствующий тип данных, например long, или проверить переполнение следующим образом:

#include<limits.h>


int cube(int num)
{
    int count,temp,i,add=1;

    temp=num;
    while(temp>0)
    {
        temp=temp/10;
        count++;
    }
    printf("%d\n" , count);

    for(i=1;i<=count;i++)
    {
        if (INT_MAX/num < add) {
            printf("overflow\n");
        }
        add=add*num;
    }

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