Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: Pascal: BigDecimal, kertoma 200!

PetriKeckman [01.11.2023 12:35:17]

#

Tykkään leikkiä isoilla luvuilla. Kertoma funktiota käsitellessä free Pascalin BigDecimal kirjaston kanssa niihin pääsee käsiksi. BigDecimal: https://www.petke.info/bigdecimalmath.pas

https://www.benibela.de/sources_en.html­#bigdecimalmath

Huikeaa:
"Supports at least numbers between 10^-19327352814 to 10^19327352814 with up to 4831838208 decimal digit precision"

Tuo ohjelma on helppo ottaa käyttöön: laittaa vain bigdecimalmath.pas tiedoston samaan hakemistoon, missä kääntää omaa ohjelmaa ja omaan ohjelmaan kirjoittaa:

uses bigdecimalmath;

Kertoma luvusta 200 on:

788657867364790503552363213932185062295135977687173263294742533244359449963403342920304284011984623904177212138919638830257642790242637105061926624952829931113462857270763317237396988943922445621451664240254033291864131227428294853277524242407573903240321257405579568660226031904170324062351700858796178922222789623703897374720000000000000000000000000000000000000000000000000

...ettäs tiedätte.

program factorialdiscoveries;
uses bigdecimalmath, sysutils;
var n: LongInt;
	k: BigDecimal;
	str: array [1..3000] of char;
function kertoma(luku: LongInt):Bigdecimal; //!
var i: LongInt;
	tulos: BigDecimal;
begin
	tulos:=1;
	i:=2;
	while i<=luku do
	begin
		tulos:=tulos*i;
		i:=i+1;
	end;
	kertoma:=tulos;
end;
begin
	n:=1;
	while (n<=200) do
		begin
			k:=kertoma(n);
			str:=BigDecimalToStr(k);
			writeln(n:3,'  ', str);
			n:=n+1;
		end;
end.

Grez [01.11.2023 13:20:23]

#

BigInteger ja BigDecimal -luokkia on, jos ei nyt kaikille, niin valtaosalle yleisesti käytössä olevista ohjelmointikielistä, monissa vakiona mukanakin.

Eli sinänsä asiassa ei ole mitään kovin ihmeellistä.

Kertomia käsitellessä, jos tarjolla on sekä isot desimaalit että kokonaisluvut, niin kokonaisluvut voisi olla luontevampi valinta. Tässä tapauksessa, kun muistinkulutuksella ja suorituskyvyllä ei ole merkitystä, varmasti kumpi vaan toimii.

jalski [04.11.2023 09:56:15]

#

Esimerkiksi 8th tukee suoraan big integer ja big float lukuja. Näitä voi myös käyttää samalla tavalla kuin lukuja normaalistikin ilman mitään merkkijonojen kanssa pelailua.

Alla esimerkki mikä tulostaa kertomat välillä 1 - 200:

needs math/factorial

: app:main
  ( n:! I "%d! : %d\n" s:strfmt . ) 1 200 loop ;

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta