Рейтинг:
20
User 7429338
В то время как inputnumber является длинным, ваш scanf все еще ожидает только целое число. Вы можете принять неподписанный длинный вот так:
unsigned long inputnumber;
scanf("%lu",&inputnumber);
Или без подписи долго-долго:
unsigned long long inputnumber;
scanf("%llu",&inputnumber);
Для справки о форматах см.
ссылка на scanf - C++ [
^]
При отображении результата необходимо соответствующим образом изменить формат printf.
Zeeking99
Спасибо, что это работает.
Рейтинг:
2
Patrice T
Цитата:
Нахождение наибольшего простого множителя числа с помощью программы на языке Си
Если вы введете 1, Ваша программа скажет, что наибольший простой множитель равен 2. Я подозреваю ошибку.
Вам также нужно обработать результат для 0 и отрицательных чисел, чтобы быть полным.
Вы можете упростить свой код
while(a!=1)
{
if(a%i==0) // you can remove the test because
{
while(a%i==0) // the condition is the same
{
a = a/i;
printf("%d ",i);
if(i>largeprimefactor)
{
largeprimefactor = i;
}
}
}
i++;
}
[Обновление]
Вы можете даже упростить больше.
while(a!=1)
{
if(a%i==0) // you can remove the test because
{
while(a%i==0) // the condition is the same
{
a = a/i;
printf("%d ",i);
if(i>largeprimefactor) // because i is never lower than largeprimefactor
{
largeprimefactor = i;
}
}
}
i++;
}
nv3
Я сомневаюсь, что это сработает, если вы оставите i++ вне цикла :-)
Patrice T
Прочтите код более внимательно. :)
Zeeking99
Иногда я меньше, чем большой преступник.
Patrice T
Никогда. Используйте отладчик, чтобы увидеть это самостоятельно.
Просто прочитав ваш код, я могу гарантировать вам, что я никогда не буду меньше, чем largeprimefactor
Zeeking99
Да, вы правы. Прости, что ошибся.
Patrice T
Не извиняйся, все когда-то были новичками.
Будьте счастливы, что вы чему-то научились.
Если у вас есть попытка отладчика, это самая полезная вещь, которую вы узнали сегодня.