 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
| Autor |
Nachricht |
gripslund
Anmeldungsdatum: 09.03.2006 Beiträge: 13 Wohnort: Quesitz
|
Verfasst am: 03.05.2026, 19:33 Titel: Große Fakultaet |
|
|
Hallo.
Vor einiger Zeit kam mir die Idee, große Fakultaeten zu berechnen - aber mit dem Ergebnis ALLER Stellen!
In Python ist das ja kein Problem, Python rechnet einfach los.
Ich hab's nun mal in FreeBASIC versucht.
Zugegeben, elegant ist anders. Als Ergebnis bekommt man aber ALLE Stellen angezeigt, sowie (wozu auch immer) die Summe der einzelnen Ziffern.
Getestet habe ich bis 1500.
Bitte etwas Geduld bei großen Eingaben
| Code: | ' Fakultaet (03.05.2026)
' Programm benoetigt "Simple-GUI" -> https://www.freebasic-portal.de/downloads/bibliotheken/
#Include "GUI.bi"
Dim zahl1S As String
Dim zahl2S As String
Dim m1S As String
Dim m2S As String
Dim zu As Integer
Dim index As Integer
Dim zahl2I As Integer
Dim summeI As Integer
Dim len1 As Integer
Dim len2 As Integer
Dim m1I As Integer
Dim m2I As Integer
Dim mrI As Integer
Dim mzI As Integer
Dim zsI As Integer
Dim zrI As Integer
Dim a As Integer
Dim b As Integer
Dim x As Integer
Dim y As Integer
Dim feldS (10000,6) As String
OpenWindow (800,800,"Fakultaet by gripslund (03.05.2026)")
Input " Fakultaet : ", zahl1S
zahl2S = Str(Val(zahl1S) - 1)
Do
zu = 1
summeI = 0
len1 = Len(zahl1S)
len2 = Len(zahl2S)
For y = 0 To 6
For x = 0 To 10000
feldS(x, y) = "0"
Next
Next
For a = 1 To len1 + 1
feldS(a + 1, 1) = Mid(zahl1S, a, 1)
Next
For a = 1 To len2
mrI = 0
For b = len1 + len2 To 1 Step -1
m1S = Mid(zahl1S, b, 1)
m1I = Val(m1S)
m2S = Mid(zahl2S, a, 1)
m2I = Val(m2S)
mzI = m1I * m2I + mrI
mrI = Int(mzI / 10)
mzI = mzI Mod 10
feldS(len1 + b + zu, a + 1) = Str(mzI)
Next
feldS(len1 + b + zu, a + 1) = Str(mrI)
zu += 1
Next
zrI = 0
For b = len1 + len2 To 1 Step -1
zsI = 0
For a = 1 To len2
zsI = zsI + Val(feldS(len1 + b, a + 1))
Next
zsI += zrI
zrI = Int(zsI / 10)
zsI = zsI Mod 10
feldS(b, len2 + 2) = Str(zsI)
Next
zahl2S = Str(Val(zahl2S) - 1)
zahl2I = Val(zahl2S)
zahl1S = ""
index = 0
For x = 1 To len1 + len2
If index = 0 Then
If feldS(x, len2 + 2) = "0" Then
' nix zu tun
Else
zahl1S += feldS(x, len2 + 2)
summeI += Val(feldS(x, len2 + 2))
index = 1
EndIf
Else
zahl1S += feldS(x, len2 + 2)
summeI += Val(feldS(x, len2 + 2))
EndIf
Next
Sleep 1
Loop Until zahl2I = 0
Print
Print " Anzahl der Ziffern : "; Len(zahl1S)
Print " Summe der Ziffern : "; summeI
Print
Print zahl1S
Print
Print " Bitte das Fenster schliessen!!!, danke ;-)"
Do
'
Loop Until window_event_close
|
Bleibt die Frage, ob die Berechnung korrekt ist. Andere Programmiersprachen (Python, C, Gambas3, PowerShell) bringen identische Ergebnisse - aber wenn der Ablauf bei allen den gleichen Fehler enthält ...
Im gewissen Rahmen kann man einen Taschenrechner zum Überprüfen verwenden. Leider aber nicht für ALLE Stellen
Nachtrag:
Fakultaet : 1500
Anzahl der Ziffern : 4115
Summe der Ziffern : 16749
481199779677977486016699009358137978183480804067261380813
085594116305751890010955912922305852067338518684640096193
435851940520911246181662702714818813933314316279628102998
441493337890446893955104871678797693253036994704678292343
992633265456528607486050757463669283236066454922775411200
834380867273693778876760002114053184802443542074196048641
769699505814352221988511945689840957059455495890545683217
923389191494429859199577347929594024990968456430204018693
811756039644243332221141259743748178042426333097698042939
528700346193541250142100456476640632401620075601086652905
686461283425571473509853587241546232533718674707651204220
738679639357752586921097530417620943435690504974703535317
644815031747509118582309069983610660847877583161105857360
133653774318607385722613257382336568352719473526951808655
730438340279555390127654893726450425044065977523574819315
328723566354112245783340405222947464028295854584787087783
463794318623688248190091770914440348859413943193439102231
686558697617996690750595276085024655931813985662147868012
116516572220041234564982585131203591260228430385350837097
961015659348594832039334433086014758131083630741185624044
124201919471275854829191721730459611221227014342978706919
321540829869459547482511057821815863972758203421014704573
006335901395129195494741137217116169125197141917606999355
098102548499670876359361811763639542241860313466829288784
928722494854566901388316101353779163279405037014002901255
091321407826146404957335180486709833601340978603647626386
588948731744998701335593648054434308314595059878092153933
533872320781775629750214605954223585731280854171623360302
351386527354380530345319626208115660198968792752571639883
520908749303461155183312029272637084467293943818798888395
497318769786822493206285996316286623755088262098547546319
842763926709192169230027700777347560775490359429762091594
162115814394614845095493703574867702768076875445801643146
475950313689484902828971733280135184357587000564259226384
118894965279758460527179580448137370868066001719937035794
858640293832087145289503032538813608126311621347501003077
726343374670128204707156508107146899051214322595285054830
539304022174006860616124716596301924348640945398280856774
653830261283537710711523041975497988707061398936091400456
597562854357877716362582536665921021512361421327244258509
912057200204936605808966008918885946596129277243578662659
345176158412987891544622491696888600926402847563824317461
203577679331195892804686873480617880729863627885822270194
652634748285906460484510707029234344227143495958576548436
995423218493636527677719783146810135894429552198797020080
689340966246506257697052333334628260138600986981551803311
453656524534829554979799155864384746873456778744511177022
504417115048446384144852100922613972719705710290385818730
699511613304957723105087605282497065142383842698086395070
804182983183113613736285120417164151968683342541191371395
891495972100321535459411146665304989065292407981648040073
947759278360456685739933164289725399327457571719474024542
571426337008159224072784036405953551420755994460563379867
172123162232577634121641808995327220393832444625114103466
461488633972370962768226561575611946655457570174298424048
403097589256186505079210430072416378779398258110593391389
255261245144676271265481267950787840226728608862519745813
621417827864074028963096780089096632639870185381070508861
934890124974050058207272712327337281417751327220138605911
696206927892904567946984098085574477567013118832660108590
160275922523977545082516288082935377765365696081113305847
971606948478989231967439702444518427022664033263173190921
171511439716795000425902692550931302159844180974184354743
004672819497982271025298737327490279920797002872759008562
411729028809095465517032632028535844980853589553076737171
779619020810986187290463488490602496000000000000000000000
000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000
00000000000
Bitte >ENTER< druecken!!!, danke  |
|
| Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4724 Wohnort: ~/
|
Verfasst am: 03.05.2026, 23:01 Titel: |
|
|
Da Python mit beliebig großen Zahlen rechnet, kann man beim Algorithmus für die Fakultätsberechnung meiner Ansicht nach nicht viel falsch machen. Ansonsten kannst du auch mal mit ARIBAS nachrechnen; das ist speziell für Berechnung in der Zahlentheorie gedacht. In den auf der Seite aufrufbaren Anleitungen finden sich unter anderem auch Funktionen zur Berechnung der Fakultät (unter "User defined functions").
Spoiler: Ich habe nur die ersten paar Ziffern überpüft; diese stimmen überein.  _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
-----
"Das wissen doch sowieso nur Nerdinauten, die Schlaumeierologie studiert haben." - coldmirror |
|
| Nach oben |
|
 |
gripslund
Anmeldungsdatum: 09.03.2006 Beiträge: 13 Wohnort: Quesitz
|
Verfasst am: 04.05.2026, 11:25 Titel: |
|
|
Ja, Python kann das.
Ich wollte halt mal einen eigenen Algorithmus "zusammenbasteln".
Danke für den Tipp bezüglich ARIBAS. Habe mich etwas damit beschäftigt - und konnte auch mein "Problem" überprüfen -> ARIBAS kommt (scheinbar) auf das gleiche Ergebnis. Ich habe die ersten 20 Stellen, die letzten 20 Stellen vor den Nullen und die Anzahl der am Ende stehenden Nullen geprüft -> stimmt soweit alles. Dann wird der Rest in der "Mitte" auch stimmen.
Somit deklariere ich meinen Algorithmus für korrekt - aber langsam.
Es ist eh nur eine Machbarkeitsstudie.
Bisher ergab sich in meinem Leben eher weniger die Notwendigkeit Fakultäten zu berechnen - oder PI, oder mich mit dem Collatz-Problem zu beschäftigen, oder abunde (abundante?) Zahlen zu finden.
@nemored: danke, dass du auch ein paar Ziffern überprüft hast  |
|
| Nach oben |
|
 |
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1294 Wohnort: Ruhrpott
|
Verfasst am: 04.05.2026, 11:27 Titel: |
|
|
Ohne es jetzt überprüft zu haben, aber bei den vielen Nullen am Ende würde ich erst einmal misstrauisch...
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
| Nach oben |
|
 |
gripslund
Anmeldungsdatum: 09.03.2006 Beiträge: 13 Wohnort: Quesitz
|
Verfasst am: 04.05.2026, 11:37 Titel: |
|
|
10*20*30*40*50*60*70*80*90*100 ergibt:
36_288_000_000_000_000
Das sind schon mal 12 Nullen.
Und nun bei jedem 10-er eine weitere dazu, bei jedem 100-er zwei, und bei 1000 drei Nullen.
Bitte jetzt rechnen ...
Das kommt dann schon hin mit den 374 Nullen am Ende. |
|
| Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|