1 / 3
Dec 2018

Problem pojawił się podczas zgłaszania zadania FCTRL2. Tutaj mój kod:

#include <bits/stdc++.h>
using namespace std;

void fctrl(int n)
{
    vector<char> factorial;
    for(int i=n; i>0; i/=10) {
        factorial.push_back(i%10);
    }

    for(int i=1; i<n; i++) {
        int temp = 0;
        for(int index=0; index<factorial.size(); index++) {
            int x = factorial[index] * i + temp;
            factorial[index] = x % 10;
            temp = x / 10;
        }
        for(int i=temp; i>0; i/=10)
            factorial.push_back(i % 10);
    }
    for(int i=factorial.size()-1; i>=0; i--)
        printf("%d",factorial[i]);
    printf("\n");
}

int main()
{
    short n, t;
    scanf("%d", &t);
    while(t--) {
        scanf("%d", &n);
        if(n==0) printf("1\n");
        else fctrl(n);
    }
    return 0;
}

Dla dokładnie tych samych danych wejściowych program działa u mnie bez zarzutu (używam domyślnego kompilatora Code Blocks). Po próbie odpalenia tego samego kodu na ideone, wyświetla się jedynie “1” (warunek if). Link do kodu.4

Zakładam że problem leży gdzieś w doborze kompilatora, niestety nie znam się na tym dobrze. Próbowałem różnych wersji gcc u siebie i na SPOJ’u, lecz za każdym razem dzieje się to samo…
.

  • created

    Dec '18
  • last reply

    Dec '18
  • 2

    replies

  • 669

    views

  • 2

    users

  • 1

    like

  • 1

    link

  1. Deklarujesz zmienne n, t jako short int, a wczytujesz opcją “%d” przeznaczoną dla zwykłego inta - widocznie gryzą się te opcje ze sobą, bo po zmianie scanfa na
    scanf("%hd", &t); //wczytuje short int
    działa normalnie.
  2. Po zastosowaniu porady z punktu 1 będzie ci wypisywało śmieci, bo w funkcji fctrl zadeklarowałeś vector<char>, więc musisz zrzutować na inta przy wypisywaniu (algorytmu nie analizowałem, więc nie wnikam w to jak wypisanie ciągu charów ma dać dwie ostatnie cyfry silni).

Wszystkie te komplikacje ze printf’em wynikają z faktu że po napisaniu programu zacząłem bawić się zmiennymi chcąc zminimalizować pobór pamięci. Po zmianie short’a na int’a i vector<int> AC poszło od razu. Nie korzystałem wcześniej z funkcji printf() i scanf(), stąd też moje trywialne komplikacje. W każdym razie dzięki wielkie za pomoc!

Suggested Topics

Want to read more? Browse other topics in System SPOJ or view latest topics.