Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Не работает код с++

ахахахах ахахахах Мастер (2134), открыт 20 часов назад
 #include <iostream>  

using namespace std;

int main() {

long long a = pow(49, 6) + pow(7, 19) - 21;
int k = 0;
while (a > 0) {
if (a % 7 == 0) {
k++;
}
a = a / 7;
}
cout << k;


return 0;
}
6 ответов
Николай Веселуха Высший разум (370534) 19 часов назад
 #include <algorithm> 
#include <iostream>
#include <string>

using namespace std;

string convert_base(long long number, const int base) {
const char digits[] = "0123456789ABCDEF";
string box;
while (number) {
box = digits[number % base] + box;
number /= base;
}
return box;
}

long long power(const int num, const int base) {
auto result = 1LL;
for (auto i = 0; i < base; ++i) result *= num;
return result;
}

int main() {
const auto a = power(49, 6) + power(7, 19) - 21;
cout << "Base10: " << a << '\n';
const auto b = convert_base(a, 7);
cout << "Base7: " << b << '\n';
const auto n = count(begin(b), end(b), '0');
cout << "Number of zeros: " << n << '\n';
}
Dmitry Просветленный (22815) 17 часов назад
Такое вообще без кода делается. Подвох в том, что эти большие числа в семеричной легко записываются:
49 ^ 6 = (7 ^2 ) ^ 6=7 ^ 12 или 10...0 (12 нулей) в семеричной
7 ^ 19 - это 10...0 (19 нулей) в семеричной.
21 = 3 * 7 или 30 в семеричной
Если вычесть третье слагаемое из первого, получим 6...640 (один ноль в конце, всего 12 разрядов).
К результату прибавляем второе слагаемое - получаем ещё слева 7 нулей.
Итого: 1 + 7 = 8 нулей.
Про код: заголовок cmath не подключен, а потеря точности при использовании вещественных чисел (pow) похерила правильный ответ
Похожие вопросы