Advertisement
alch1337

Śmieszne liczby

May 10th, 2013
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.72 KB | None | 0 0
  1. #include<iostream>
  2. #include<conio.h>
  3. #include<string>
  4. #include<math.h>
  5. #include<fstream>
  6.  
  7. int getDigit(int& nIndeks, int& nLiczba)
  8. {
  9.     return std::stoi(std::to_string(nLiczba).substr(nIndeks-1,1));
  10. }
  11.  
  12. int getNumOfDigits(int& nLiczba)
  13. {
  14.     return std::to_string(nLiczba).length();
  15. }
  16.  
  17. int removeDigit(int& nIndeks, int& nLiczba)
  18. {
  19.     std::string sTemp = std::to_string(nLiczba);
  20.     sTemp.erase(nIndeks-1, 1);
  21.     return std::stoi(sTemp);
  22. }
  23.  
  24. int checkNumber(int& nLiczba, int (*pfnGetDigit)(int&, int&), int (*pfnGetNumOfDigits)(int&), int (*pfnRemoveDigit)(int&, int&))
  25. {
  26.     int nMianownik;
  27.     double nUlamek, nTemp;
  28.     for (unsigned i = 2; i <=100; i++)
  29.     {
  30.         nMianownik = nLiczba*i;
  31.         for (int j = 1; j<=pfnGetNumOfDigits(nLiczba); j++)
  32.         {
  33.             for (int k = 1; k<=pfnGetNumOfDigits(nMianownik); k++)
  34.             {
  35.                 if (pfnGetDigit(j, nLiczba) == pfnGetDigit(k, nMianownik))
  36.                 {
  37.                     if (pfnRemoveDigit(k, nMianownik)!=0)
  38.                     {
  39.                         nUlamek = (double)nLiczba/nMianownik;
  40.                         nTemp = (double)pfnRemoveDigit(j, nLiczba)/pfnRemoveDigit(k, nMianownik);  
  41.                         if (nUlamek == nTemp)
  42.                         {;
  43.                             return i;
  44.                         }
  45.                     }
  46.                 }
  47.             }
  48.         }
  49.     }
  50.     return 0;
  51. }
  52.  
  53. int main()
  54. {
  55.     std::fstream plik("Liczby.txt", std::ios::out);
  56.     int nWynik = 0;
  57.     if (plik.is_open())
  58.     {
  59.         for (int i = 10; i <= 69000; i++)
  60.         {
  61.             nWynik = checkNumber(i, getDigit, getNumOfDigits, removeDigit);
  62.             if (nWynik != 0)
  63.             {
  64.                 if (i%10 != 0 && (nWynik*i)%10 != 0)
  65.                 {
  66.                     std::cout<<i<< "/" << i*nWynik<<" - " << nWynik*i<<"/"<<i<<std::endl;
  67.                     plik << i << "/" << i*nWynik<<" - " << nWynik*i<<"/"<<i<<std::endl;
  68.                 }
  69.             }
  70.         }
  71.     }
  72.     else std::cout<<"Nie mozna otworzyc pliku (Liczby.txt)"<<std::endl;
  73.     plik.close();
  74.     _getch();
  75.     return 0;
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement