Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Predstavljanje velikih brojeva

[es] :: C/C++ programiranje :: C/C++ za početnike :: Predstavljanje velikih brojeva

[ Pregleda: 1866 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

totmast
Banja Luka,BiH

Član broj: 290557
Poruke: 1
*.broadband.blic.net.



Profil

icon Predstavljanje velikih brojeva16.09.2011. u 19:21 - pre 102 meseci
Treba mi pomoć oko zadatka: Ako bi se na prvo polje šahovske table stavilo jedno zrno, a na svako sljedeće polje dvostruko više nego na prethodno, izračunati koliko bi se zrna nalazilo na posljednjem (64-om) polju, odnosno koliko bi ukupno zrna trebalo da bude na tabli. predpostavljam da se broj posmatra kao niz cifara!!! ali ne znam kako to da izvedem...

Code:

#include <stdio.h>
#include <stdlib.h>
#define MAXCIF 1000
main(){
long s;
int niz[MAXCIF],i;
niz[0]=1;
for(i=1; i<63; i++)
niz[i]=2*niz[i-1];
for (i=0; i<63; i++)
s+=niz[i];
system ("pause");}

Sad kako bih ispisao s
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4867
*.dynamic.sbb.rs.

Jabber: xfiles@elitesecurity.org


+622 Profil

icon Re: Predstavljanje velikih brojeva16.09.2011. u 19:55 - pre 102 meseci
Postoji više načina kako se može baratati velikim brojevima. Jedan od uobičajenih je koristiti biblioteku posebno napravljenu za to i ne razmišljati o limitima. Ipak, pošto se radi o školskom zadatku (koji ima didaktičke ciljeve) i C jeziku, verujem da je profesor na umu imao da se u nizu karaktera "simulira" sabiranje dva ista broja, baš kao u školi ("osam plus osam je šesnaest, pišem šest, pamtim jedan").

Drugim rečima, dovoljno je da imaš jedan niz karaktera odgovarajuće dužine i funkciju koja će u svakoj iteraciji (63) promeniti taj niz za "duplo". Recimo, napraviš niz napunjen nulama, sem poslednjeg elementa "00000000000000000001". Zatim krećeš s obradom niza unazad, od poslednjeg ka prvom elementu. Sabiraš cifru po cifru, pamtiš "višak" za sledeće sabiranje, dodaješ. Ovde ćeš se suočiti s time da je svaka cifra zapisana kao karakter zapravo uvećana za 48, tj za offset s vrednošću '0'.

Naravno, postoje i inteligentnija rešenja, ovo je samo ideja.



Inače broj koji tražiš je (ako se ne varam): 2^64-1, tj 18446744073709551615.



[Ovu poruku je menjao X Files dana 16.09.2011. u 21:07 GMT+1]
 
Odgovor na temu

Picsel
Beograd

Član broj: 39817
Poruke: 440
*.dynamic.isp.telekom.rs.



+7 Profil

icon Re: Predstavljanje velikih brojeva16.09.2011. u 21:39 - pre 102 meseci
Moglo bi i bez velikih brojeva jer taj broj staje u unsigned long long.
Stavi da su s i niz tog tipa, a za ispis koristi
Code:
printf("%llu", s);


Ako to ne radi (verovatno nece ako koristis Dev-C++ okruzenje), onda
Code:
printf("%I64u", s);


Takodje, fali ti jedna iteracija u petlji, trebas da ides do 63 (uslov ti je <63).
 
Odgovor na temu

mp95

Član broj: 331809
Poruke: 1
31.223.145.*



Profil

icon Re: Predstavljanje velikih brojeva03.01.2016. u 12:05 - pre 50 meseci
Ja sam pomoću nizova riješila zadatak na ovaj način:
Code:
#include <stdio.h>
#include <stdlib.h>

int main()
{int i,niz[100]={1},niz2[100]={0},pom,pom2,prenos2,j,k,n=63,prenos=0;
for(k=0;k<n;k++)
for(i=0;i<100;i++)
   {pom=niz[i]*2+prenos;
niz[i]=pom%10;
prenos=pom/10;}
printf("Na zadnjem polju bi se nalazilo:");
for(i=99;niz[i]==0;i--);
for(i;i>=0;i--)
printf("%d",niz[i]);
printf("zrna.");
while(n>=0)
    {for(prenos2=0,i=0;i<100;i++)
    {pom2=niz[i]+niz2[i]+prenos2;
    niz2[i]=pom2%10;
    prenos2=pom2/10;
}
n--;
niz[0]=1;
for(i=1;i<n;i++)
    niz[i]=0;
    for(k=0,prenos=0;k<n;k++)
for(i=0;i<100;i++)
   {pom=niz[i]*2+prenos;
niz[i]=pom%10;
prenos=pom/10;}}
printf("\nNa tabli ukupno ima:");
for(i=99;niz2[i]==0;i--);
for(i;i>=0;i--)
printf("%d",niz2[i]);
printf("zrna.");
    return 0;
}


Lako se može provjeriti tačnost (umjesto n=63, može se staviti neki drugi broj polja)

[Ovu poruku je menjao Mihajlo Cvetanović dana 03.01.2016. u 14:39 GMT+1]
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: Predstavljanje velikih brojeva

[ Pregleda: 1866 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.