Kezdőoldal » Számítástechnika » Programozás » C-ben sok szám szorzása?...

C-ben sok szám szorzása? Érték és kiíratás, hogyan?

Figyelt kérdés

algoritmus példa, csak meg akarom csinálni c-ben.

első 25 szám szorzata...

röviden a hibajelenség..

int a

int szam

<szorozgatom ciklussal stb. a 1-25>

printf ("%d",szam)


nem írja ki csak 11-12 számjegyig aztán össze vissza ír mindent...

segítsetek lécci.



#változás #nagyszam
2014. szept. 24. 11:55
 1/7 anonim ***** válasza:
25%

Az int értékkészlete [−32767,+32767], egyszóval túlcsordul az eredmény.

Int helyett unsigned long long int típus kell neked.

2014. szept. 24. 12:28
Hasznos számodra ez a válasz?
 2/7 anonim ***** válasza:

Nem lesz jó az unsigned long, mert annak is túl kicsi az értékkészlete.


Vagy a double lesz jó, vagy a speciálisan erre a célra való, sokszámjegyes típusok (tegyük hozzá, pusztulat lassúak). Most nem tudom hirtelen, hogy C-hez van-e ilyen, de szerintem kell, hogy akadjon. Ha nincs, akkor sajna implementálni kell - vagy megmaradni a double képességeinek határain belül.

2014. szept. 24. 12:38
Hasznos számodra ez a válasz?
 3/7 anonim ***** válasza:
Hmm, tényleg kevés rá a 64 bit.
2014. szept. 24. 12:55
Hasznos számodra ez a válasz?
 4/7 anonim ***** válasza:

Igen :)

Viszont megnéztem gyorsan, mit tud a double. 170 faktoriálisig lehet stresszelni, viszont azt még elfelejtettem ideírni, hogy a printf-nél vigyázni kell, mert ha a formátum "%d", akkor a kiírt eredmény helytelen lesz. Helyette a "%.0f" megoldást javaslom.


Valahogy így (stdio.h kell hozzá):


void main(int argc, char *argv) {

˙˙˙˙double result = 1.0;

˙˙˙˙int target = atoi(argv[1]);

˙˙˙˙int i;

˙˙˙˙for (i = 1; i <= target; i++) {

˙˙˙˙˙˙˙˙result *= i;

˙˙˙˙}

˙˙˙˙printf("%.0f\n", result);

};


Paranccsor: demo.exe 25

2014. szept. 24. 13:41
Hasznos számodra ez a válasz?
 5/7 anonim ***** válasza:
UI.: Kedves kérdező, a megoldás nyilván nem teljes, hogy ne én oldjam meg az egészet. Van még benne buktató, úgyhogy ne így add be a házit :)
2014. szept. 24. 13:44
Hasznos számodra ez a válasz?
 6/7 iostream ***** válasza:

"Viszont megnéztem gyorsan, mit tud a double. 170 faktoriálisig lehet stresszelni"


Nem akarom kipukkasztani a buborékodat, de a double is csak 64 bit, tehát nem fog tudni többféle számot tárolni, mint egy akármilyen más 64 bites szám (sőt, a mindenféle speciális értékek miatt egy 64 bites kettes komplemensű integerben többféle érték tárolható). Tehát ha nagy a karakterisztika (a hatvány része a lebegőpontosnak, ami kb egy normál alakot jelent), akkor pontatlan lesz a szám.

2014. szept. 24. 16:26
Hasznos számodra ez a válasz?
 7/7 anonim ***** válasza:
Ezt nem volt időm tesztelni, meg nem is érdekem (ellentétben a kérdezővel), de a másik út továbbra is járható. Egyébiránt valószínűleg így is elégséges lesz a pontosság a szorzatok jellegéből fakadóan.
2014. szept. 24. 17:27
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!