Evo kako ja vidim resenje problema:
Code:
// Ivan Bulic, Dev-Cpp 4.9.9.1, Windows 2000
#include <iostream>
using namespace std;
int main(){
unsigned long long suma = 1, p = 1;
for (int i=0;i<64;i++){
if (i>0){
p *= 2;
suma += p;
}
cout.width(3); cout << i+1 <<"\t";
cout.width(20); cout << p << "\t";
cout.width(20); cout << suma <<endl;
}
system("PAUSE");
return 0;
}
Propusti dosadasnjih resenja su koriscenje tipa
double i funkcije
pow.
Tip
double omogucava tacnost do nekih 15 cifara u rezultatu.
Znaci, bez obzira sto tip
double moze da prikaze jos vece brojeve, neces moci da postignes tacan rezultat.
Cak i ako se uzme da je
long double a; nece se dobiti dobar rezultat jer su argumenti funkcije
pow tipa
double.
Gornji primer daje na konzoli tezultat:
Code:
1 1 1
2 2 3
3 4 7
4 8 15
5 16 31
6 32 63
7 64 127
8 128 255
9 256 511
10 512 1023
11 1024 2047
.
.
.
56 36028797018963968 72057594037927935
57 72057594037927936 144115188075855871
58 144115188075855872 288230376151711743
59 288230376151711744 576460752303423487
60 576460752303423488 1152921504606846975
61 1152921504606846976 2305843009213693951
62 2305843009213693952 4611686018427387903
63 4611686018427387904 9223372036854775807
64 9223372036854775808 18446744073709551615
Press any key to continue . . .