Stránka 1 z 1

c++ faktorial

Napsal: 16 čer 2015 15:36
od rhsCZ
Zdravím ve škole jen tak okrajově berem c++ a zajímá mě kde mám v chybu v kódu, začne to blbnout po číslu 5040, které se vynásobí 8 mi vrátí zápornou hodnotu. Pro test jsem zadával faktorial čísla 9, pro všechny čísla program menší jak 8 funguje a vypíše správný výsledek faktoriálu, zkoušel jsem dát i proměnné typu "long long", ale nic. Sice mi trochu blbnou čísla jako 0,1, ale to je zatím jedno.

Kód: Vybrat vše

#include <stdio.h>

void main()
{
int x;
long long z=2,y;
printf("zadej cislo ze ktereho chcete udelat faktorial.\n");
scanf("%d",&x);
for(y=3;y<=x;y++)
{
z= z*y;
}
printf("faktorial cisla %d je %d",x,z);
}

Re: c++ faktorial

Napsal: 16 čer 2015 15:57
od Oxxid

Kód: Vybrat vše

#include <stdio.h>

void main()
{
   int x;
   unsigned __int64 z = 2, y;
   printf("zadej cislo ze ktereho chcete udelat faktorial.\n");
   scanf("%d", &x);
   for (y = 3; y <= x; y++)
   {
      z = z*y;
   }
   printf("faktorial cisla %d je %llu", x, z);
}


Funguje bez problemu. S datovym typem int32 doje k preteceni u cehokoli vetsiho nez 12. Btw. nemelo by se v C++ pouzivat spise cin a cout?

Re: c++ faktorial

Napsal: 16 čer 2015 16:32
od rhsCZ
cin a cout je dle mě ekvivalentem scanf a printf a nevidím rozdíl mezi obě způsoby čtení a výpisu.
Mám dotaz co znamená _ a 64 ve definici proměnných konkrétně v té části "_int64".

Re: c++ faktorial

Napsal: 16 čer 2015 16:38
od Oxxid
64 bit integrer.

Re: c++ faktorial  Vyřešeno

Napsal: 16 čer 2015 17:15
od faraon
rhsCZ píše:cin a cout je dle mě ekvivalentem scanf a printf...

To sice je, ale cin a cout jsou metody ze standardní knihovny C++ s názvem iostream, zatímco scanf a printf jsou funkce ze standardní knihovny jazyka C s názvem stdio.h, takže jsou to ekvivalenty z úplně jiného jazyka! Ono se to nezdá, ale mezi těmi dvěma jazyky jsou dost podstatné rozdíly, takže vůbec není dobré je míchat dohromady, pokud to není nezbytně nutné a pokud opravdu velmi dobře nevíš co děláš.

I když mezi námi, ten kód co jsi sem postnul není žádné C++ ale úplně obyčejné C, navíc pěkná prasárna, protože to co tam máš neodpovídá ani ANSI C z roku 1989! Takhle se v Céčku programovalo v sedmdesátých a osmdesátých letech, a byla to pěkná divočina, jenže od té doby tenhle jazyk prošel velkým vývojem a několika reformami, a dostal vlastnosti které z něj udělali mnohem lepší nástroj než byl předtím.