Doppelte Genauigkeit in C ++ (oder pow (2, 1000))
Ich arbeite an Project Euler, um meine C ++ - Codierungsfähigkeiten zu verbessern, um mich auf die Programmierherausforderung (en) vorzubereiten, die wir im nächsten Semester haben werden (da wir Python nicht verwenden dürfen, boo!).
Ich bin auf # 16 und versuche einen Weg zu finden, um echte Präzision für 2¹ °°° @ zu erreiche
Zum Beispiel
int main(){
double num = pow(2, 1000);
printf("%.0f", num):
return 0;
}
prints
10715086071862673209484250490600018105614050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Welche die meisten Zahlen fehlen (aus Python):
>>> 2**1000
10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376L
Granted, ich kann das Programm mit einem Python 1-Liner schreiben
sum(int(_) for _ in str(2**1000))
das gibt mir sofort das Ergebnis, aber ich versuche, einen Weg zu finden, es in C ++ zu tun. Irgendwelche Hinweise? (Haha...
Bearbeiten
Etwas außerhalb der Standardbibliotheken ist für mich wertlos - in diesen Wettbewerben ist nur toter Baum-Code erlaubt, und ich werde wahrscheinlich nicht 10.000 Zeilen externen Codes ausdrucken ...