C ++ Быстрые базовые преобразования, количество цифр

Я должен написать приложение, в котором пользователь дает длину цифрового массива и базу, в которую будет преобразована сумма элемента массива. Затем пользователь дает массив. Приложение должно суммировать данные элементы, а затем конвертировать сумму в заданную базу и считать цифры суммы. Более того, он также должен печатать, сколько цифр было дано в качестве ввода.
Так, например,

input is:
3 10 // 3 - length, 10 - base
1 2 3 // array
And the output:
1 // number of digits of the sum in base 10
6 // number of digits in input

Другой пример:

Input:
3 2
1 2 3
Output:
3
5

Что я написал до сих пор:

#include <iostream>

using namespace std;

void convert(int N, int b)
{
//int result = 0;
if (N == 0)
return ;

int x = N % b;
N /= b;
if (x < 0)
N += 1;
convert(N, b);

cout << (x < 0 ? x + (b * -1) : x);
return;

}

int countDigits(int number) {
if (number < 10) {
return 1;
}
int count = 0;
while (number > 0) {
number /= 10;
count++;
}
return count;

}

int main()
{
int n, d;
cin >> n >> d;

int a;
long long int sum = 0;

int count = 0;
while (count++ < n) {
cin >> a;
sum += a;
}

cout << "Sum: " << sum << endl << "Diff Base: ";

if (sum != 0)
{
convert(sum, d);
cout << endl;
}
else
cout << "0" << endl;
return 0;

}

Проблема в том, что я не знаю, как изменить функцию преобразования на int, поэтому я могу легко передать возврат в функцию countDigits. А также я не знаю, как считать цифры. Это должно быть максимально эффективно.

-2

Решение

Я считаю, что вам нужна функция, которая просто делает: сумма -> цифры с указанной базой. Вам будет сложнее представить свою сумму в неопределенной базе, а затем считать ее цифры. Приведенная ниже функция должна охватывать широкий спектр баз.

int nr_digits_in_base(long long int N, int B)
{
assert(B > 1);
int nr_digits_to_represent_N_in_base_B = N < 0 ? 2 : 1;
while (N /= B)
nr_digits_to_represent_N_in_base_B++;
return nr_digits_to_represent_N_in_base_B;
}

Кроме того, есть способ использовать логарифмы для расчета ответа в фиксированное время.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector