Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 24 odgovora
  • 10.828 pregleda

Najnovija ↓

Re: Pomoc oko c++ programa - Izumitelj igre sah 26.09.2005. u 12:19 · pre 257 meseci #21
Rezultat je tocan, ali reprezentacija mozda nije onakva da bi zadovoljila svakoga.
Ako ti se to ne svidja probaj ovo:
Code:

#include <iostream>
#include <cmath>

using namespace std;

int main()
{
    unsigned long long a=0;

    a--;

    cout<<a<<endl;
    
    system("PAUSE");
    
    return 0;
}


Rezultat je tocan.
Re: Pomoc oko c++ programa - Izumitelj igre sah 26.09.2005. u 21:54 · pre 257 meseci #23
Citat:
NrmMyth: E pa nema tu lijeka, ni 64-bitni int ne moze spremiti taj broj u cijelosti, pa zato potrazi alternativni razred za rad sa velikim brojevima.


Nema lijeka ??

Evo vam rjesenja:

Code:

#include<stdio.h>
#include<math.h>
int main(){
double brojac=1;
for (int i=1; i<64; i++) brojac+=pow(2,i);
printf("\n Broj zrna je: %.0f",brojac);
return 0;
}


Program ispise rezultat 18446744073709551620, ( a pravo rjesenje je 18446744073709551615), sto mislim da je vrlo tocno za razliku od 1.84467e+19

:)

Re: Pomoc oko c++ programa - Izumitelj igre sah 26.09.2005. u 22:54 · pre 257 meseci #24
Zasto ne pogledate ovaj program koji sam gore napisao?! On ispisuje tocan rezultat! long long jest 64-bita. Ako napises sizeof(long long) dobit ces odgovor 8 bajta iliti 64 bita. Nazalost moj kompilator ne moze ici dalje i iskompilirati np. long long long, ali 64 bita je dovoljno, zato sto je odgovor na ovaj zadatak tocno najveca brojka koja stane u 64 bita. Naravno radi se o brojkama unsigned.
Re: Pomoc oko c++ programa - Izumitelj igre sah 27.09.2005. u 10:57 · pre 257 meseci #25
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 . . .

Odgovori
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme