получение неожиданного вывода для введенного числа для поиска куба

#c

#c

Вопрос:

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

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

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

int cube(int);

void main()
{
    int n,ans;

    printf("enter a number : ");
    scanf("%d" , amp;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("%dn" , count);

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

    return add;
}
  

Пример:-

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

Но в то же время, когда я ввожу число как 10101

введите число: 10101
5
1343051877

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

Комментарии:

1. Совет профессионала: Когда вы получаете бессмысленные значения, подобные этому, это почти всегда случай неинициализированных переменных . Что count устанавливается перед увеличением? Ответ: Ничего конкретного. Поскольку компилятор не думает, что вам все равно, он просто использует что угодно в качестве значения. Скомпилируйте с -Wall , чтобы выявить проблемы, подобные этой.

Ответ №1:

Вы получаете переполнение, поскольку 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("%dn" , count);

    for(i=1;i<=count;i  )
    {
        if (INT_MAX/num < add) {
            printf("overflown");
        }
        add=add*num;
    }

    return add;
}