Informatică, întrebare adresată de elena2oo7, 8 ani în urmă

Este urgent. Pentru informatica. Dau coroana. Va rog ajtor!
Se dau doua numere : n si k Se efectueaza urmatoare operatii :
1. Se calculeaza numarul Fact = n!
2. Se elimina toate zerourile de la sfarsitul numarului Fact ( ex : daca Fact = 12200320000 atunci Fact devine 1220032 ).
3. Se calculeaza rasturnatul numarului Fact
4. Se afiseaza a k-a cifra a lui Fact
Date de intrare
In fişierul de intrare kfact.in se gasesc cele doua numere n si k pe un singur rand separate printr-un spatiu.
Date de ieşire
În fişierul de ieşire kfact.out se va afisa cifra obtinuta in urma executarii operatiilor de mai sus.
Restricţii
1 ≤ k ≤ 9 1 ≤ n ≤ 1 000 000 daca cifra ceruta nu exista ( ex : Fact = 21 si k = 6 ) se va afisa -1
Exemplu
kfact.in 5 2
kfact.out 1
Explicaţie 1. Fact = 5! = 1 * 2 * 3 * 4 * 5 = 120. 2. Dupa elminarea zerourilor de la sfarsit Fact = 12. 3. Rasturnatul lui Fact = 21. 4. Afisam ce-a de-a 2-a cifra a numarului Fact care este 1.

Răspunsuri la întrebare

Răspuns de ovdumi
2

Răspuns:

#include <iostream>

#include <cmath>

#include <fstream>

using namespace std;

ifstream fin ("kfact.in");

ofstream fout ("kfact.out");

int main()

{

   long int n,k,Fact=1,rast=0,C=0,x;

   fin>>n;

   fin>>k;

   for (int i=2;i<=n;i++)

   {

       Fact=Fact*i;

   }

   while (Fact%10==0)

   {

       Fact=Fact/10;

   }

   while (Fact!=0)

   {

       rast=rast*10+Fact%10;

       Fact=Fact/10;

   }

   Fact=rast;

   while (rast!=0)

   {

       C++;

       rast=rast/10;

   }

   x=Fact/pow(10,C-k);

   fout<<x%10;

   fin.close();

   fout.close();

   return 0;

}


ovdumi: daca ai nelamuriri nu ezita sa mi le comunici
elena2oo7: Multumesc mult! M-ai salvat. Iti dau acum coroana!
Alte întrebări interesante