Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream> // std::cout
- #include <cmath> // std::pow
- #include <stdlib.h> // atoi
- using namespace std;
- int main(int argc, const char **argv)
- {
- if (argc != 2) {
- cout << "Használat: automorf <n>\n";
- exit(1);
- }
- int n = atoi(argv[1]);
- // automorf számoknak nev. azokat a számokat mely négyzetének utolsó számjegyeiből alkotott szám
- // pont az eredeti számot adja. ilyen pld. 5^2=25 és utolsó számjegye az 5. vagy akár a 76 mert 76^2=5776.
- // találd meg az összes n jegyű automorf számot.
- // maximális 32 bites előjeles szám a 2,147,483,647, ami 10 jegyű.
- // Viszont az összes 10 jegyű már nem fér el int-ben, tehát csak 9 jegyig tudunk dolgozni:
- if (n > 9) {
- cout << "Ilyen nagy számokat már nem tudok kezelni int-ben\n";
- exit(1);
- }
- int elszam = 0; // ha n == 1, ezek az egyjegyű számok
- int utszam = 9;
- if (n > 1) {
- elszam = pow(10, n-1); // 10 az n-ediken már n+1 jegyű
- utszam = 10*elszam - 1;
- }
- int njegy = utszam+1; // egy szám moduló njegy megadja az utolsó n jegyet
- // pl. n=3 esetén:
- // elszam = 100
- // utszam = 999
- // njegy = 1000
- cout << "Keressük az automorf számokat " << elszam << " és " << utszam << " között:\n";
- // long long-ot használunk a négyzetre: az int 32 bites, a long long 64 bites
- // Így a négyzet belefér a knegyz változóba:
- for (long long k=elszam; k <= utszam; k++) { // végigmegyünk az összes n jegyű számon egyesével
- long long knegyz = k * k; // vesszük a négyzetét
- long long utson = knegyz % njegy; // és annak az utolsó n jegyét (modulóval)
- if (utson == k)
- cout << k << " négyzete " << knegyz << endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement