Advertisement
kburnik

C++ - Zadatak Tomo

Jan 9th, 2013
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.71 KB | None | 0 0
  1. /*
  2.  
  3. Pripreme 2013 - C++ radionica
  4.  
  5. Zadatak: Tomo
  6.  
  7. Autor zadatka: HSIN
  8.  
  9. Ponudjeno rjesenje: Kristijan Burnik, udruga informaticara Bozo Tezak
  10.  
  11. Datum rjesavanja: 2013-01-09
  12.  
  13. */
  14. #include <iostream>
  15. #include <cstdlib>
  16.  
  17. typedef unsigned long long int uint64;
  18.  
  19. using namespace std;
  20.  
  21. int main() {
  22.  
  23.     long long int a,b,c;
  24.    
  25.     cin >> a >> b >> c;
  26.    
  27.     // koja je dekadska tezina broja c ? 10,100,1000 ?
  28.     int suffixWeight = (c == 0) ? 10 : 1;
  29.     int t;
  30.     t = c;    
  31.     while (t > 0) {
  32.         suffixWeight *= 10;
  33.         t/=10;
  34.     }
  35.        
  36.     // zanima nas samo nekoliko zadnjih znamenki
  37.     a %= suffixWeight;
  38.    
  39.     // uzmimo u obzir periodicnost kod mnozenja
  40.     uint64 periodStart = (a * b) % suffixWeight;
  41.    
  42.     // pretpostavljamo da nema rjesenja
  43.     int found = 0;
  44.    
  45.     // prvi broj koji ispitujemo
  46.     uint64 testNumber = a * b;
  47.    
  48.     // broj iteracija (koliko puta smo mnozili)
  49.     int iterations = 0;
  50.     do {
  51.         // broji ovo kao iteraciju
  52.         iterations++;
  53.  
  54.         // da li nam se sufiks poklapa?
  55.         if ( testNumber % suffixWeight == c ) {
  56.             // da, pronadjeno je rjesenje, iskacemo iz petlje
  57.             found = 1;
  58.             break;
  59.         }
  60.        
  61.         // trazimo iduci broj
  62.         testNumber *= b;
  63.        
  64.         // zanimaju nas samo znamenke reda velicine sufiksa
  65.         testNumber %= suffixWeight;
  66.        
  67.         // toliko dugo dok se period ne ponovi
  68.     } while ( testNumber % suffixWeight != periodStart  );
  69.    
  70.    
  71.     // ispis rezultata
  72.     if (found) {
  73.         cout << iterations << endl;
  74.     } else {
  75.         cout << "NIKAD" << endl;
  76.     }
  77.    
  78.  
  79.     system("pause");
  80.     return 0;
  81. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement