Ketan2305 Ответов: 1

Код не работает за пределами определенного значения


Итак, мы получили практическую задачу найти число нулей за факториалом числа. Я подумал о 2 подходах, пожалуйста, скажите, какой бы вы оценили выше.
Итак, теперь к проблеме: первый не отвечает с 13 и далее и отображает одно и то же отрицательное число для каждого числа после 13, Вот код:
#include<iostream>
using namespace std;
int fact(int n){
    float f=1;
    while(n){
        f=f*n;
        n--;
    }
    return f;
}
int main(){
    float temp;
    int ans, zero=0, num;
    cout<<"enter a number :";
    cin>>num;
    ans=fact(num);
    cout<<"factorial of "<<num<<" is "<<ans;
    temp=ans;
    for( ; ; ){
        ans=ans/10;
        temp=temp/10;
        if(ans==temp){
            zero++;
            continue;
        }
        else{
            break;   
        }
    }
    cout<<"number of zero's :"<<zero;
}

Второй код ничего не показывает после ввода данных:
#include<iostream>
using namespace std;
int fact(int n){
    float f=1;
    while(n){
        f=f*n;
        n--;
    }
    return f;
}
int main(){
    int two=0, ten=0, fiv=0, ft=0 ,num;
    float fac;
    cout<<"enter a number";   
    cin>>num;
    fac=fact(num);
    cout<<"factorial of "<<num<<" is "<<fac;
    while(num){
        if(num%10==0){
            ten++;   
        }
        else if(num%2==0){
            two++;
        }
        else if(num%5==0){
            fiv++;   
        }
        else{
            continue;   
        }
        num--;
    }
    while(two!=0||fiv!=0){
        ft++;
        fiv--;
        two--;
    }
    cout<<"number of zeroes behind the number is "<<ft+ten;
}

(я новичок, и если оба работают, то какой из них я должен представить?)

Что я уже пробовал:

изменил int на float, и это должно быть по крайней мере 30 символов, так что ... да

1 Ответов

Рейтинг:
5

Patrice T

Цитата:
изменил int на float, и это должно быть по крайней мере 30 символов, так что ... да

Не используйте поплавки, факториалы-это целые числа, поэтому вместо них используйте Бигинты.
Цитата:
Итак, мы получили практическую задачу найти число нулей за факториалом числа.

Как я понимаю, вы хотите знать количество нулей справа от факториала.
Факториал - это умножение целых чисел. Какие числа по отдельности или умноженные вместе дают нули справа?

Немного проанализировав, вы обнаружите, что вам не нужно вычислять сам факториал.
Цитата:
Второй код ничего не показывает после ввода данных:

Ваш код ведет себя не так, как вы ожидаете, и вы не понимаете, почему !

Существует почти универсальное решение: запускайте свой код на отладчике шаг за шагом, проверяйте переменные.
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не знает, что вы должны делать, он не находит ошибок, он просто помогает вам, показывая, что происходит. Когда код не делает того, что ожидается, вы близки к ошибке.
Чтобы увидеть, что делает ваш код: просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.
Отладчик - Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010 - YouTube[^]
Отладчик здесь только для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.