Kezdőoldal » Számítástechnika » Programozás » Hogy tudok ki íratni 100!...

Pada960220 kérdése:

Hogy tudok ki íratni 100! körüli számot C-ben?

Figyelt kérdés
2016. ápr. 17. 23:55
1 2
 1/14 anonim ***** válasza:
0%

Ábrázolni/kiszámolni vele tudod (15-17 jegy pontosság):

[link]


Kiíratni a double-t vele (pl. %e):

[link]

2016. ápr. 18. 00:21
Hasznos számodra ez a válasz?
 2/14 anonim ***** válasza:
76%

Double-be 100! körüli számot? És ezt hol álmodtad? :)

100! 157 számjegyet jelent, ezt az alap típusok nem képesek tárolni. A legegyszerűbb megoldás, ha leszedsz egy BigNum libet, ami lehetővé teszi bármekkora számok kezelését. A legnépszerűbb talán a GMP MP, de ha rákeresel Google-ben a BigNum libekre C nyelvhez, jópár találatot kapsz.

2016. ápr. 18. 03:39
Hasznos számodra ez a válasz?
 3/14 anonim ***** válasza:
0%

...és miért is kell ilyen hosszú számot kiíratni?


...mire a végére téved a szemed, már elfelejted az elejét... :-)

2016. ápr. 18. 13:22
Hasznos számodra ez a válasz?
 4/14 A kérdező kommentje:

nem az a lényeg,hogy minek...ha nem íratom is ki..egy változóba elkell tárolni...és ha kiiratom 0-át ír ki. A programom:

Bekér 2 számot, N és M.

C = N! / ((N – M)! · M!)

és kiiratom a C-t.

Ha megadom, N = 100 és M = 6

az eredmény 0.

[link]

a többinél jó megoldást kapok.

2016. ápr. 18. 20:16
 5/14 anonim ***** válasza:

You may assume that the final value of C will fit in a 32-bit signed integer (Pascal: longint, C: long).

Ez azt jelenti, hogy a 100! nem resze a feladatnak.


Amugy magas szintu nyelvek a verseny/targy neve, es nem Pythont hasznalsz?:)

C alatt en a Boost libet ajanlom, ha megis kellene bignum.

2016. ápr. 18. 23:45
Hasznos számodra ez a válasz?
 6/14 A kérdező kommentje:

amint látod az egyik teszteset N bemenete 100, ami 100!. a programomban segéd változókat használok, és egy for ciklussal 1-N , 1-M és 1-(N-M) ig megy a ciklus, és így kiszámolom annak az értékét.

csak a 100 és 6 nál ad rossz eredményt.. biztos van más ilyen is, ez csak példa teszteset..

2016. ápr. 19. 00:16
 7/14 anonim ***** válasza:

Ja, akkor csak a modszered nem tokeletes.


Ezt ugy kellene, hogy a programod kiegyszerusiti maganak a szamitast, es akkor ideiglenesen sem kell a 100!-t tarolni.

2016. ápr. 19. 00:22
Hasznos számodra ez a válasz?
 8/14 SimkoL ***** válasza:

A leírásban nincs benne, hogy csak egészekkel dolgozhatsz, sőt az sem, hogy szükséged lesz a 100!-ra.


Ha megérted:


program verseny1;


{$APPTYPE CONSOLE}


uses SysUtils;


var N, M : Byte;

C : Double;


function Fact(Number: Byte): Int64;

begin

Result:= 1;

if Number > 0 then Result:= Fact(Number - 1) * Number;

end;


function Multiply(start, stop : Byte; mlp: Double ): Double;

var i : Byte;

begin

Result := mlp;

for i := start to stop do Result := Result * i;

end;


begin

N := 100;

M := 6;

C := Multiply(N - M + 1, N, 1 / Fact(M));

WriteLn(N, ' things taken ', M, ' at a time is ', C:0:0, ' exactly.');

ReadLn;

end.

2016. ápr. 19. 02:05
Hasznos számodra ez a válasz?
 9/14 anonim ***** válasza:

"Double-be 100! körüli számot? És ezt hol álmodtad? :)"


Gondolom ezt te is tudod, úgyhogy már a kérdést sem értem. Leírtam, ~16 tizedesjegy pontossággal. IEEE 754 (azon belül is double) szabványban álmodták ezt meg egyébként, ahol 10^308 körül van a maximum érték. Mivel nem írta, hogy mihez kell, teljesen joggal gondoltam, hogy 16 tizedesjegy pontosság elég.

2016. ápr. 21. 13:20
Hasznos számodra ez a válasz?
 10/14 A kérdező kommentje:

Az egyik példa bemenet a 100 6 ha nem látnátok. és arra a bemenetre a programom 0 át ír ki. Meg olyan számokra is, ami túl nagy.

A másik 2 bemenetre azt adja ki amit kell.

és ha nem is kell kiíratni a 100! hol tudok vele számolni segéd változók nélkül?

a faktoriálist for ciklussal csinálom meg, van ennél egyszerűbb módja?

konkrétan 3 for ciklust használok, és 3 segéd változót az N! (N-M)! és M! miatt.

2016. ápr. 30. 09:02
1 2

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!