Spoj przekroczono limit czasu.

0

Macie pomysł jak uprościć program?

#include <iostream>
using namespace std;
int main()
{
    int d=1;
    int D;
    cin>>D;
    while( d < D+1)
    {
        int n;
        int silnia=1;
        cin>>n;
        for(int i=n; i>1; i--)  silnia=silnia*i;
        if(silnia>=100)
        {
            while(silnia>=100) silnia=silnia/10;
            cout<<silnia/10<<" ";
            cout<<silnia%10<<endl;
        }
        else
        {
            cout<<silnia/10;
            cout<<" ";
            cout<<silnia%10<<endl;
        }
        d=d+1;
    }
    return 0;
}
2

Jeśli to zadanie z dwoma ostatnimi cyframi zapisu dziesiętnego silni to nie ma żadnych podstaw aby liczyć te silnie.

0

W zadaniu są potrzebne tylko - liczba jedności i liczba dziesiątek, tak więc nie ma konieczności liczenia silni ale nie wiem jak wykombinować to żeby tego nie liczyć, masz jakiś pomysł?

1

Pewnie. Policz sobie pierwszych kilka/kilkanaście wartości, zauważ pewną zależność. Jeśli chcesz to ubrać w matematyczne słownictwo, zastanów się jakie są czynniki pierwsze silni kolejnych liczb naturalnych i co one gwarantują.

0

Dzięki wielkie, jakoś nie pomyślałem przy tym zadaniu aby patrzeć w ten sposób.

0

Wracam z problemem :)
Otóż rozpisałem sobie silnię do 15 i nie widzę zależności pomiędzy cyframi jedności i dziesiątek. Jedyne co mogłem zauważyć, że ilość zer na końcu będzie coraz większa, ale to chyba nie rozwiązuje tego problemu.

  1. 1
  2. 2
  3. 6
  4. 24
  5. 120
  6. 720
  7. 5040
  8. 40320
  9. 362880
  10. 3628800
  11. 39916800
  12. 479001600
  13. 6227020800
  14. 87178291200
  15. 1307674368000
0

To teraz zapisz sobie wyłącznie ostatnie dwie cyfry wyniku...

0

o jejku cały czas myślałem, że w tym programie chodzi o dwie pierwsze liczby :D

0

Ten spoj mnie wykończy... Wyskakuje błędna odpowiedź, ma ktoś pomysł dlaczego tak się dzieje?

#include <iostream>
using namespace std;
int main()
{
    int d=0,D;
    long n;
    cin>>D;
    while(d<D)
    {
        cin>>n;
        switch(n)
        {
            case 1:
                cout<<"0 1"<<endl;
                break;
            case 2:
                cout<<"0 2"<<endl;
                break;
            case 3:
                cout<<"0 6"<<endl;
                break;
            case 4:
                cout<<"2 4"<<endl;
                break;
            case 5:
                cout<<"2 0"<<endl;
                break;
            case 6:
                cout<<"2 0"<<endl;
                break;
            case 7:
                cout<<"4 0"<<endl;
                break;
            case 8:
                cout<<"2 0"<<endl;
                break;
            case 9:
                cout<<"8 0"<<endl;
                break;
            default:
                cout<<"0 0"<<endl;
                break;
        }
    d++;
    }
    return 0;
}
0

Znalazłem problem musiałem dodać "case 0" dziękuje za pomoc.

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