Mnożenie do określonej wartości, limit ?

0

Witam, dręczą mnie dwa pytania.

  1. Jaki jest największy typ danych, w którym możemy przechować największą liczbę i ile ona może wynosić ? Chodzi mi o int, long int

  2. Czy mógłby mi ktoś pokazać jak zrobić funkcję na ten wzór

 1 * 2 * 3 * 4 * 5 ... * 666

i otrzymać wynik w formie wyjściowej cout ?

Pozdrawiam.

0
  1. W teorii - nie ma (BigInt itp. biblioteki). W bibliotece standardowej - całkowita: long long int, zmiennoprzecinkowa: long double.

  2. Nie wiem o co chodzi... cout << ((1+666)*333?

0
MSM napisał(a)
  1. Nie wiem o co chodzi... cout << ((1+666)*333?

Chodzi mi o to aby program mnożył liczby kolejno od 1 do 666 czyli (1) razy (2) razy (3) razy (4) .... razy (666)

0

To jest 666! i nie ma na to krótszego wzoru niż mnożenie po kolei. Są jedynie wzory przybliżone dla dużych liczb. Oprócz tego w C++ nie ma typu liczbowego mogącego pomieścić taką liczbę:
666! = 10106320568407814933908227081298764517575823983241454113404208073574138021036970229892028068014910120409898022
03557527039339704057130729302834542423840165856428740661530297972410682828699397176884342513509493787480774903493389
25526287834176188326189942648494465716169313138031111761957305152642332038964180541081606760789306748325981681536460
98286686627481103856036579732846048420780941415564277087453451005988294884725059490719677272709119650608852092943406
65506480226426083357901503097781140832497013738079112777615719116203317542199999489227144752667085796752482688850461
26373228453917614236582397369676453760327876932228670885547506983568164371084614056976933006577541441308350104365957
22994544465172428240021405551404642962910019014384146757305529649145692697340385007641405511436428361286133047341473
48086095123859660926788460671181469216252213374650499557831741950594827147225699896414088694251261045196672567495532
22882671938160611697400311264211156133257350321296072971178199390387741639438171846476552757501425212904028323696392
26243444569750240581673684318090685445772584729839794378180726482136086500987493697610569612037912653636656646968022
45199962040041544438210327210476982203348458596093079296569561267409473914124132102055811493736199668788534872321705
36051130524871079644147921335454258357607659625021345466796883799602327316306909470042946710666392541958119313633986
05456586736239552319323994048094041087672320000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

0

Ech, wieczór nadchodzi więc trochę kiepsko widzę... Myślałem że tam jest znak '+' (moje rozwiązanie to byłby taki skrócony algorytm).

To co chcesz osiągnąć się nazywa silnia :)

long long int silnia(int n)
{
    long long int result;
    for (int i = 2; i <=n; i++)
    {
        result *= i;
    }
    return result
}

Aczkolwiek nie liczyłbym na obliczenie silnii z 666, wynik to po prostu niewyobrażalnie duża liczba. Dokładnie 1,0106320568407814933908227081299e+1593. To dużo więcej niż atomów we wszechświecie. Bardzo dużo więcej. Ten nade mną zresztą też to policzył kiedy ja pisałem tego posta...

0
MSM napisał(a)

To dużo więcej niż atomów we wszechświecie.

user image

0

Wg. kilku źródeł (szukłem kilka sekund w internecie) ilość atomów we wszechświecie wynosi 2^80, czyli "marne" 1208925819614629174706176.
Ale nawet gdyby wynosiło, powiedzmy, 2300 albo 2600 to i tak byłoby dużo mniej niż silnia z 666 (zapis skrócony = "666!" ).
To tyle off-topicu :>

0

ilość atomów we wszechświecie wynosi 280, czyli "marne" 1208925819614629174706176
chyba nie 2
80 miało być tylko 10^80.
Akurat tyle atomów co podałeś (około 1204428156360000000000000) to jest w 24 gramach węgla C12. Taki jeden kamyk. Czyli zmieści się na dłoni.

1 użytkowników online, w tym zalogowanych: 0, gości: 1