Dupla precisão em C ++ (ou pow (2, 1000))

Estou trabalhando no Project Euler para aprimorar minhas habilidades de codificação em C ++, em preparação para o (s) desafio (s) de programação que teremos no próximo semestre (já que eles não nos permitem usar Python, boo!).

Estou no 16º lugar e estou tentando encontrar uma maneira de manter a precisão real durante 2 ° °°°

Por exemplo:

int main(){
    double num = pow(2, 1000);
    printf("%.0f", num):
    return 0;
}

impressões

1071508607186267320948425049060001810561405000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

Qual está faltando a maioria dos números (do python):

>>> 2**1000

10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376L

Concedido, eu posso escrever o programa com um liner Python 1

sum(int(_) for _ in str(2**1000))

isso me dá o resultado imediatamente, mas estou tentando encontrar uma maneira de fazer isso em C ++. Alguma dica? (haha ...)

Editar:

Algo fora das bibliotecas padrão é inútil para mim - apenas o código da árvore morta é permitido nesses concursos, e provavelmente não vou imprimir 10.000 linhas de código externo ...

questionAnswers(7)

yourAnswerToTheQuestion