Search code examples
modulobasic

How to get each individual digit of a given number in Basic?


I have one program downloaded from internet and need to get each digit printed out from a three digit number. For example:

Input: 123

Expected Output:

1

2

3

I have 598

Need to Get:

5
9
8

I try using this formula but the problem is when number is with decimal function failed:

FIRST_DIGIT  = (number mod 1000) / 100
SECOND_DIGIT = (number mod 100) / 10
THIRD_DIGIT  = (number mod 10)

Where number is the above example so here is calulation:

FIRST_DIGIT = (598 mod 1000) / 100 = 5,98 <== FAILED...i need to get 5 but my program shows 0 because i have decimal point

SECOND_DIGIT = (598 mod 100) / 10 = 9,8 <== FAILED...i need to get 9 but my program shows 0 because i have decimal point

THIRD_DIGIT = (598 mod 10) = 8 <== CORRECT...i get from program output number 8 and this digit is correct.

So my question is is there sample or more efficient code that get each digit from number without decimal point? I don't want to use round to round nearest number because sometime it fill failed if number is larger that .5.

Thanks


Solution

  • You don't have to do any fancy integer calculations as long as you pull it apart from a string:

    INPUT X
    X$ = STR$(X)
    FOR Z = 1 TO LEN(X$)
        PRINT MID$(X$, Z, 1)
    NEXT
    

    Then, for example, you could act upon each string element:

    INPUT X
    X$ = STR$(X)
    FOR Z = 1 TO LEN(X$)
        Q = VAL(MID$(X$, Z, 1))
        N = N + 1
        PRINT "Digit"; N; " equals"; Q
    NEXT
    

    Additionally, you could tear apart the string character by character:

    INPUT X
    X$ = STR$(X)
    FOR Z = 1 TO LEN(X$)
        SELECT CASE MID$(X$, Z, 1)
            CASE " ", ".", "+", "-", "E", "D"
                ' special char
            CASE ELSE
                Q = VAL(MID$(X$, Z, 1))
                N = N + 1
                PRINT "Digit"; N; " equals"; Q
        END SELECT
    NEXT