#include <iostream> /* run this program using the console pauser or add your own getch, system("pause") or input loop */ /*autor: Agnieszka Klich*/ using namespace std; long long int l, r; long long int ile=0; int pierwszaCyfra(long long int liczba) { if(liczba<0) liczba*=-1; while(liczba>9){ liczba/=10; }; return liczba; } long long int zeroNaPozycji(long long int liczba){ if(liczba<0) liczba*=-1; long long int pozycja = 1; int cyfra; while(liczba>9){ cyfra = liczba%10; if(cyfra==0) return pozycja; liczba/=10; pozycja*=10; }; return -1; } bool potyczkowa (long long int liczba) { if(liczba==0) return false; if(liczba<0) liczba*=-1; long long int liczba_copy = liczba; int ostatniaCyfra = liczba%10; int dwieOstatnieCyfry = liczba%100; int trzyOstatnieCyfry = liczba%1000; int podzielnoscPrzez7 = liczba%7; int sumaCyfr = 0; int cyfra; do{ cyfra = liczba_copy%10; liczba_copy /=10; sumaCyfr+=cyfra; } while(liczba_copy>0); liczba_copy = liczba; do{ cyfra = liczba_copy%10; if(cyfra==0){ return false; } liczba_copy -= cyfra; liczba_copy /=10; if(cyfra==2 && ostatniaCyfra%2!=0) return false; if(cyfra==3 && sumaCyfr%3!=0) return false; if(cyfra==4 && dwieOstatnieCyfry%4!=0) return false; if(cyfra==5 && ostatniaCyfra!=5) return false; if(cyfra==6 && ostatniaCyfra%2!=0) return false; if(cyfra==6 && sumaCyfr%3!=0) return false; if(cyfra==7 && podzielnoscPrzez7!=0) return false; if(cyfra==8 && trzyOstatnieCyfry%8!=0) return false; if(cyfra==9 && sumaCyfr%9!=0) return false; } while(liczba_copy>0); return true; } int main(int argc, char** argv) { cin >> l >> r; for (long long int i=l; i<=r; ++i) { int pierwsza = pierwszaCyfra(i); long long int pozycjaZero = zeroNaPozycji(i); while(pozycjaZero!=-1){ i+=pozycjaZero; pozycjaZero = zeroNaPozycji(i); } if(i%pierwsza!=0){ // cout << "i = " << i << "zwiekszam o:" << pierwsza-i%pierwsza << endl; i+= pierwsza-i%pierwsza; } // cout << "sprawdzam: " << i << endl; if(i<=r && potyczkowa(i)){ // cout << "potyczkowa: " << i << endl; ++ile; } } cout << ile << "\n"; return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 | #include <iostream> /* run this program using the console pauser or add your own getch, system("pause") or input loop */ /*autor: Agnieszka Klich*/ using namespace std; long long int l, r; long long int ile=0; int pierwszaCyfra(long long int liczba) { if(liczba<0) liczba*=-1; while(liczba>9){ liczba/=10; }; return liczba; } long long int zeroNaPozycji(long long int liczba){ if(liczba<0) liczba*=-1; long long int pozycja = 1; int cyfra; while(liczba>9){ cyfra = liczba%10; if(cyfra==0) return pozycja; liczba/=10; pozycja*=10; }; return -1; } bool potyczkowa (long long int liczba) { if(liczba==0) return false; if(liczba<0) liczba*=-1; long long int liczba_copy = liczba; int ostatniaCyfra = liczba%10; int dwieOstatnieCyfry = liczba%100; int trzyOstatnieCyfry = liczba%1000; int podzielnoscPrzez7 = liczba%7; int sumaCyfr = 0; int cyfra; do{ cyfra = liczba_copy%10; liczba_copy /=10; sumaCyfr+=cyfra; } while(liczba_copy>0); liczba_copy = liczba; do{ cyfra = liczba_copy%10; if(cyfra==0){ return false; } liczba_copy -= cyfra; liczba_copy /=10; if(cyfra==2 && ostatniaCyfra%2!=0) return false; if(cyfra==3 && sumaCyfr%3!=0) return false; if(cyfra==4 && dwieOstatnieCyfry%4!=0) return false; if(cyfra==5 && ostatniaCyfra!=5) return false; if(cyfra==6 && ostatniaCyfra%2!=0) return false; if(cyfra==6 && sumaCyfr%3!=0) return false; if(cyfra==7 && podzielnoscPrzez7!=0) return false; if(cyfra==8 && trzyOstatnieCyfry%8!=0) return false; if(cyfra==9 && sumaCyfr%9!=0) return false; } while(liczba_copy>0); return true; } int main(int argc, char** argv) { cin >> l >> r; for (long long int i=l; i<=r; ++i) { int pierwsza = pierwszaCyfra(i); long long int pozycjaZero = zeroNaPozycji(i); while(pozycjaZero!=-1){ i+=pozycjaZero; pozycjaZero = zeroNaPozycji(i); } if(i%pierwsza!=0){ // cout << "i = " << i << "zwiekszam o:" << pierwsza-i%pierwsza << endl; i+= pierwsza-i%pierwsza; } // cout << "sprawdzam: " << i << endl; if(i<=r && potyczkowa(i)){ // cout << "potyczkowa: " << i << endl; ++ile; } } cout << ile << "\n"; return 0; } |