Gyakorlati alapok

Hány számjegy avagy mennyi digit?

 

Az előző, Digit vagy helyiérték? című fejezet kis kényszerű kitérőt tett néhány fontos informatikai fogalom értelmezésére. Ebben a fejezetben néhány rövid Java-kóddal azt vizsgáljuk meg, hogy miképpen számolhatjuk ki egy bekért szám számjegyeit (azaz digitjeinek számát). Többféle algoritmusból is válogathatunk.

 

A probléma alapjában véve if-else ágak halmazával megoldható; az alábbi algoritmus magja stackoverflow.com oldalról származik:

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

import java.util.*;

public class Main {
public static void main(String[] args) {
    int szamjegy = 0;
    Scanner scanner = new Scanner (System.in);
    System.out.println ("Kérem, hogy adja meg a vizsgálni kívánt számot (1 és 1000000000 között)!");
    String szamString = scanner.nextLine();
    int szam = Integer.parseInt(szamString);
    while (szam < 1 || szam > 1000000000) {
        System.out.println ("Kérem, hogy csak pozitív számot adjon meg 1 és 1000000000 között!");
        szamString = scanner.nextLine();
        szam = Integer.parseInt(szamString);
    }

    if(szam < 100000){
        if(szam < 100){
            if(szam < 10)
                szamjegy = 1;
            else
                szamjegy = 2;
    }else{
        if(szam < 1000)
            szamjegy = 3;
        else{
            if(szam < 10000)
                szamjegy = 4;
            else
                szamjegy = 5;
        }
    }
    }else {
        if(szam < 10000000) {
            if(szam < 1000000)
                szamjegy = 6;
            else
                szamjegy = 7;
        }else {
            if(szam < 100000000)
                szamjegy = 8;
            else {
                if (szam < 1000000000)
                szamjegy = 9;
                else
                szamjegy = 10;
            }
        }
    }
    System.out.println ("A bevitt szám (" + szam + ") " + szamjegy + " számjegyű.");
    }
}

 

Végeredmény:

Kérem, hogy adja meg a vizsgálni kívánt számot (1 és 1000000000 között)!
0
Kérem, hogy csak pozitív számot adjon meg 1 és 1000000000 között!
1000000001
Kérem, hogy csak pozitív számot adjon meg 1 és 1000000000 között!
100000
A bevitt szám (100000) 6 számjegyű.

 

Nagy segítség azonban, ha visszaemlékezünk a Lóg a ritmus! című fejezetben leírtakra. Ha vesszük például a 10-es alapú logaritmusokat 1 és 9 között...

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

import java.math.*;

public class Main {
    public static void main(String[] args) {
    double kitevo = 0;
    double eredmeny = 10;
        for(int i = 1; i <= 9; i++){
        kitevo = Math.log10(eredmeny);
        System.out.println((int)eredmeny + " log10 = " + (int)kitevo);
        eredmeny *= 10;
        }
    }
}

 

Végeredmény:

10 log10 = 1
100 log10 = 2
1000 log10 = 3
10000 log10 = 4
100000 log10 = 5
1000000 log10 = 6
10000000 log10 = 7
100000000 log10 = 8

1000000000 log10 = 9

 

...akkor listázáskor kísérteties hasonlóságot vehetünk észre a végeredmények és a számjegyek száma között. A felhasználható képlet:

 

szamjegy = (int)(Math.log10(szam) + 1

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

import java.util.*;

public class Main {
public static void main(String[] args) {
    int szamjegy = 0;
    Scanner scanner = new Scanner (System.in);
    System.out.println ("Kérem, hogy adja meg a vizsgálni kívánt számot (1 és 1000000000 között)!");
    String szamString = scanner.nextLine();
    int szam = Integer.parseInt(szamString);
    while (szam < 1 || szam > 1000000000) {
        System.out.println ("Kérem, hogy csak pozitív számot adjon meg 1 és 1000000000 között!");
        szamString = scanner.nextLine();
        szam = Integer.parseInt(szamString);
    }

    szamjegy = (int)(Math.log10(szam) + 1);
    System.out.println ("A bevitt szám (" + szam + ") " + szamjegy + " számjegyű.");
    }
}

 

Végeredmény:

Kérem, hogy adja meg a vizsgálni kívánt számot (1 és 1000000000 között)!
0
Kérem, hogy csak pozitív számot adjon meg 1 és 1000000000 között!
1111
A bevitt szám (1111) 4 számjegyű.

 

Angster Erzsébet - Objektumorientált tervezés és programozás, JAVA, 1. kötet című munkájában (254. oldal) egy érdekes további lehetőséget említ meg. A bekért számot mindig 10-zel osztjuk (azaz roppant elmés módon mindig 1 digittel csökkentjük), ezzel párhuzamosan a számjegy értékét 1-gyel növeljük. Ez a do-while ciklusba foglalt számolás addig tart, amíg a szám nem lesz kisebb 10-nél, ekkor kilépünk a ciklusból, ezáltal a szamjegy változó az aktuális digitmennyiséget fogja tárolni. Nézzük meg alapalgoritmusát...

 

do{
    szam /= 10;
    szamjegy++;
    }while(szam != 0);

 

...majd illesszük be a már ismert futtatható Java-kódba:

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

import java.util.*;

public class Main {
public static void main(String[] args) {
    int szamjegy = 0;
    Scanner scanner = new Scanner (System.in);
    System.out.println ("Kérem, hogy adja meg a vizsgálni kívánt számot (1 és 1000000000 között)!");
    String szamString = scanner.nextLine();
    int szam = Integer.parseInt(szamString);
    while (szam < 1 || szam > 1000000000) {
        System.out.println ("Kérem, hogy csak pozitív számot adjon meg 1 és 1000000000 között!");
        szamString = scanner.nextLine();
        szam = Integer.parseInt(szamString);
    }
    int szam2 = szam;
    do{
        szam /= 10;
        szamjegy++;
        }while(szam != 0);
    System.out.println ("A bevitt szám (" + szam2 + ") " + szamjegy + " számjegyű.");
    }
}

 

Végeredmény:

Kérem, hogy adja meg a vizsgálni kívánt számot (1 és 1000000000 között)!
1234567
A bevitt szám (1234567) 7 számjegyű.