Форум программистов, компьютерный форум, киберфорум
Наши страницы

факториал - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Инкремент невалидного итератора http://www.cyberforum.ru/cpp-beginners/thread381647.html
Привет. Этот вопрос задали знакомому на собеседовании... Что произойдет при инкременте невалидного итератора?
C++ Dll com-совместимая Подскажите пожалуйста, как в реализации обычная dll отличается от com-совместимой dll? http://www.cyberforum.ru/cpp-beginners/thread381588.html
C++ Timer начало змейки
Есть таймер и есть label1 таймер включен в таймере прописано Label1->Left= Left +1; и в результате Label1 перемещаетья примерно на 5 сантиметров влево и все, больше не двигается в чем...
C++ DbLookUpComboBox
Есть Datasource2 ADOQuery2 , DbLookUpComboBox и база данных в которой 2 параметра это Surname и код (ключевое поле) в свойствах выбрано : в DataSource2 : DataSet-> ADOQuery2 в ...
C++ Возведение в степень http://www.cyberforum.ru/cpp-beginners/thread381574.html
Дано число n и его нужно возвести в степень s. Можно ли это как-то сделать не используя циклы. Заранее спасибо...
C++ перегрузка операторов Имеется такая программа: class reversion { vector<int> mass1; vector<int> mass2; vector<int> rev1; vector<int> rev2; vector<int> mult1; vector<int> mult2; подробнее

Показать сообщение отдельно
Zheka91
4 / 4 / 1
Регистрация: 22.11.2010
Сообщений: 101

факториал - C++

11.11.2011, 09:52. Просмотров 1085. Ответов 8
Метки (Все метки)

найти число нулей в конце факториала числа N по основанию каждого множителя K (1<=N<=1000000000, 2<=K<=1000)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#include <iostream>
typedef unsigned long long ulong;
#include <vector>
#include <sstream>
#include <iomanip>
using namespace std;
const int base = 1000000000;
class BigNumb
{
    vector<int> numb;
public:
    BigNumb();
    BigNumb(ulong num);
    BigNumb& operator  =(const BigNumb& num);
    bool operator ==(const BigNumb& num)
    {
        return numb==num.numb;
    }
    int operator %(int num)
    {
        return *numb.begin()%num;
    }
    BigNumb  operator  *(const BigNumb &num);
    BigNumb  operator *=(const BigNumb& num);
    BigNumb  operator  /(long num);
    BigNumb  operator /=(long num);
    friend ostream& operator <<(ostream& ost,BigNumb& num)
    {
        if(num.numb.empty())
            ost << 0;
        else
            ost << num.numb.back();
        for(int i=(int) num.numb.size()-2;i>=0;--i)
            ost << setfill('0') << setw(9) << num.numb[i];
        return ost;
    }
};
BigNumb::BigNumb()
{
    numb.push_back(0);
}
BigNumb::BigNumb(ulong num)
{
    ostringstream ost;
    ost << num;
    string str = ost.str();
    for(int i=str.length();i>0;i-=9)
    {
        if(i<9)
        {
            numb.push_back(atoi(str.substr(0,i).c_str()));
        }
        else
        {
            numb.push_back(atoi(str.substr(i-9,9).c_str()));
        }
    }
}
BigNumb& BigNumb::operator =(const BigNumb &num)
{
    this->numb = num.numb;
    return *this;
}
BigNumb BigNumb::operator *(const BigNumb &num)
{
    BigNumb n;
    n.numb.resize(numb.size()+num.numb.size());
    for(size_t i=0;i<numb.size();++i)
        for(int j=0,carry=0;j<num.numb.size() || carry; ++j)
        {
            long long cur = n.numb[i+j] + numb[i] * 1ll * (j < (int)num.numb.size() ? num.numb[j] : 0) + carry;
            n.numb[i+j] = int (cur % base);
            carry = int (cur / base);
        }
        while(n.numb.size() > 1 && n.numb.back() == 0)
            n.numb.pop_back();
    return n;
}
BigNumb BigNumb::operator *=(const BigNumb &num)
{
    return *this = *this * num;
}
BigNumb BigNumb::operator /(long num)
{
    int carry = 0;
    for (int i=(int)numb.size()-1; i>=0; --i)
    {
        long long cur = numb[i] + carry * 1ll * base;
        numb[i] = int (cur / num);
        carry = int (cur % num);
    }
    while (numb.size() > 1 && numb.back() == 0)
    numb.pop_back();
    return *this;
}
BigNumb BigNumb::operator /=(long num)
{
    return *this=*this/num;
}
void main()
{
    /*freopen("INPUT.TXT",   "r", stdin);
    freopen("OUTPUT.TXT",  "w", stdout);*/
    ulong N,c=0;
    int K;
    BigNumb r=1, n;
    cin>>N>>K;
    char buf[100000];
    for(int i=2;i<=N;i++)
    {
        itoa(i,buf,K);
        n=atol(buf);
        r*=n;
    }
    cout<<r<<endl;
    while(true)
    {
        n=r%10;
        if(n==0)
            c++;
        else
            break;
        r/=10;
    }
    cout << c << endl;
}
считает что то не правильно...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru