#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;
}