[ --daniel-- @ 24.09.2006. 23:10 ] @
zad: unesi n brojeva za koji treba ucitati faktorijel

Code:


#include <iostream>
const int MAX = 100;
const int D = 100UL;
unsigned long arr[MAX];

main(void){
    int n;
    int i,j,k,a[MAX];
    
    std :: cin >> j;

    for (i=0;i<j;i++)
        std:: cin >> a[i];
    for (i=0;i<j;i++)
    {
        n=a[i];
    arr[MAX - 1] = 1UL;
    for(int i = 1; i <= n; i++){
        unsigned long temp = 0UL;
        for(int j = MAX - 1; j >= 0; j--){
            arr[j] = arr[j] * i + temp;
            temp = arr[j] / D;
            arr[j] %= D;
        }
    }    
    bool lz = true;
    for(int j = 0; j < MAX; j++){
        if(lz && arr[j])
            lz = false;
        if(!lz)
            std :: cout << arr[j];
    }
    std :: cout << "\n";
    }
    system("pause");
    return 0;
}
[ #Ninja# @ 25.09.2006. 00:25 ] @
Ovo ti je nebulozno. Jednostavno napravi dinamički niz u koji ćeš unijeti elemente i protjeraj ih kroz funkciju za izračunavanje faktoriela.
[ --daniel-- @ 25.09.2006. 10:52 ] @
ali mene zanima u čemu je ovdje pogreška i kako da se ispravi da taj kod proradi
[ Mali Misha @ 25.09.2006. 11:38 ] @
Na početku stavi:
Code:
const int D = 10UL;

Nakon toga bi trebalo da radi kako treba.
[ --daniel-- @ 25.09.2006. 13:49 ] @
nakon onog mi nije proradilo..
ali ovo novo radi kako treba:
Code:
#include <iostream>
#include<windows.h>

int main(void) {
  char Fakt[3000];
  long N,I,J,produkt,preko,broj;
  int i,k,a[101];
  
  std::cin >> k;

  N=k;
  for (i=0;i<k;i++)
      std::cin>>a[i];
  for (i=0;i<k;i++)
  {
      N=a[i];  
      Fakt[0]=1; broj=1;
      for(I=1;I<=N;I++) {
        preko=0;
        for(J=0;J<broj;J++) {
          produkt=Fakt[J]*I+preko; Fakt[J]=produkt%10; preko=produkt/10;
        }
        while(preko) {
          Fakt[broj++]=preko%10; preko/=10;
        }
      }
      for(J=broj-1;J>=0;J--){ std::cout << (int)Fakt[J];  }
      std::cout <<"\n";
  }
  system("pause");
  return 0;
}
[ VRider @ 25.09.2006. 14:02 ] @
Mozes li da iskomentarises ovaj kod, jer ovoliki kod za takvu banalnost kao sto je faktorijel je malo teze skapirati.
I kako to mislis (u samom zadatku) za koji treba "ucitati faktorijel"? Valjda izracunati?
[ srki @ 25.09.2006. 14:19 ] @
Vrider, zar ne vidis char Fakt[3000];
To bi valjda trebalo da ti kaze da se radi o tome da je cilj da se nadju veliki faktorijeli koji imaju do 3000 cifara.

ovaj ovde deo ti implementira mnozenje sa velikim brojevima:
Code:

        preko=0;
        for(J=0;J<broj;J++) {
          produkt=Fakt[J]*I+preko; Fakt[J]=produkt%10; preko=produkt/10;
        }
        while(preko) {
          Fakt[broj++]=preko%10; preko/=10;
        }


[ --daniel-- @ 25.09.2006. 14:50 ] @
Citat:
VRider: Mozes li da iskomentarises ovaj kod, jer ovoliki kod za takvu banalnost kao sto je faktorijel je malo teze skapirati.
I kako to mislis (u samom zadatku) za koji treba "ucitati faktorijel"? Valjda izracunati?

prijatelju ako nemožeš da shvatiš da se radi o većim faktorijelima onda se zapitaj neke stvari..ili sam ja krivo shvatio tvoj odgovor pa to znači da ti znaš puno manji kod za izračunavanje recimo 100! pa ako je tako de ga stavi dobro bi mi došao.
ps. i da ide izracunati, a ne ucitati
[ Yu Raider @ 28.09.2006. 22:38 ] @
Mislim da bi rekurzija za izračunavanje faktorijela bila mnogo... čitljivija i da bi kod bio lepši.