Вычислить пол (pow (2, n) / 10) mod 10 - сумма цифр pow (2, n)
Это тоже вопрос по математике, но яЯ хотел бы реализовать это в C ++ ... Итак, у меня есть номер в виде2^n
, и я должен рассчитать сумму его цифр (в базе 10; P). Моя идея состоит в том, чтобы рассчитать его по следующей формуле:
sum = (2^n mod 10) + (floor(2^n/10) mod 10) + (floor(2^n/100) mod 10) + ...
для всех его цифр:floor(n/floor(log2(10)))
Первый член легко вычислить с помощью модульного возведения в степень, но яЯ в беде с другими. посколькуn
большой, и я нея не хочу использовать мою большую целочисленную библиотеку, я не могут рассчитатьpow(2,n)
без модуля. Фрагмент кода для первого семестра:
while (n--){
temp = (temp < 1) % 10;
};
y){
tempx -= y;
c++;
};
return (x - c*y);
};
int sumofdigs(unsigned short exp2){
int s = 0;
int nd = floor((exp2) * (log10(2.0))) + 1;
int c = 0;
while (true){
ldb temp = 1.0;
int expInt = floor(exp2 - c * log2((ldb)10.0));
ldb expFrac = exp2 - c * log2((ldb)10.0) - expInt;
while (expInt>0){
temp = mod(temp * 2.0, 10.0 / pow(2.0, expFrac)); //modulo with non integer b:
//floor(a*b) mod m = (floor(a mod (m/b)) * b) mod m, but can't code it
expInt--;
};
ldb r = pow(2.0, expFrac);
temp = (temp * r);
temp = mod(temp,10.0);
s += floor(temp);
c++;
if (c == nd) break;
};
return s;
};