1. Gdy przekraczasz limit czasu to znaczy, że jest duże prawdopodobieństwo, że pętla nie ma końca. Twoje pętle działają tak długo jak b > 0. Skoro nigdzie nie zmieniasz b to program po wykonaniu tej liczby testów nigdy się nie zakończy.
2. Warunek:
if(n>1) liczba*=++a;
Jest niepotrzebny.
3. Zmienna liczba nie jest zerowana (jedynkowana :D). Po jednym teście każdy kolejny test jest błędny, bo działasz na liczbie która ma wartość inną od jedynki. Inne rozwiązanie - zrób liczbę lokalną zmienną w pętli:
#include <iostream>
using namespace std;
int main()
{
int n;
int b;
int d=1;
int dziesiatki, jednosci;
cin>>b;
while(b>0)
{
int liczba=1;
cin>>n;
if(n<10)
{
for(int a=1;a<=n;a++)
{
liczba*=a;
}
dziesiatki=liczba/10;
jednosci=liczba%10;
cout<<dziesiatki<<' '<<jednosci<<endl;
}
b--;
}
return 0;
}
4. Drugą cyfrę liczysz niepoprawnie. Zobacz dla większych wartości. Powinno być:
dziesiatki=(liczba/10)%10;
5. Widzę, że rozumiesz potrzebę liczenia silni tylko poniżej n=10. Dodaj jeszcze else z wypisywaniem tych dwóch zer.