I'm not sure if I completely understand the rules, or that this code is bug free.
Even if there aren't any bugs, it probably isn't optimal.
Regards,
Michael
'public domain, jan 2012, michael calkins
DECLARE FUNCTION flip$ (a AS STRING)
DIM a AS LONG
DIM b AS LONG
DIM c AS LONG
DIM d AS STRING
DIM e AS STRING
DIM f AS LONG
CLS
FOR a = 100 TO 999
IF a MOD 10 THEN
FOR b = 100 TO 999
IF b MOD 10 THEN
c = a * b
IF c MOD 10 THEN
d = flip(LTRIM$(STR$(a)))
IF LEN(d) THEN
e = flip(LTRIM$(STR$(b)))
IF LEN(e) THEN
f = VAL(d) * VAL(e)
IF f MOD 10 THEN
IF flip(LTRIM$(STR$(c))) = LTRIM$(STR$(f)) THEN
PRINT a; "*"; b; "="; c, d; "*"; e; "="; f
END IF
END IF
END IF
END IF
END IF
END IF
NEXT
END IF
NEXT
END
FUNCTION flip$ (a AS STRING)
DIM t AS STRING
DIM i AS INTEGER
DIM c AS INTEGER
t = SPACE$(LEN(a))
FOR i = 1 TO LEN(a)
c = ASC(MID$(a, i, 1))
SELECT CASE c
CASE &H36: c = &H39
CASE &H39: c = &H36
CASE &H33, &H34, &H37: flip = "": EXIT FUNCTION
END SELECT
MID$(t, LEN(t) + 1 - i) = CHR$(c)
NEXT i
flip = t
END FUNCTION
It seems I just posted this about an hour ago. We both arrived at basically the same answers independently. The only difference is that I would consider there to be only 10 correct answers since the other 9 are formed simply by swapping the positions of the 3 digit numbers.
FOR a = 101 TO 999
a$ = LTRIM$(STR$(a))
IF INSTR(a$, "3") OR INSTR(a$, "4") OR INSTR(a$, "7") THEN GOTO skip1
FOR b = a TO 999
b$ = LTRIM$(STR$(b))
IF INSTR(b$, "3") OR INSTR(b$, "4") OR INSTR(b$, "7") THEN GOTO skip2
c = a * b
c$ = LTRIM$(STR$(c))
IF INSTR(c$, "3") OR INSTR(c$, "4") OR INSTR(c$, "7") THEN GOTO skip2
FOR n = LEN(c$) TO 1 STEP -1
n$ = MID$(c$, n, 1)
SELECT CASE n$
CASE "6"
cr$ = cr$ + "9"
CASE "9"
cr$ = cr$ + "6"
CASE ELSE
cr$ = cr$ + n$
END SELECT
NEXT n
cr = VAL(cr$)
FOR n = LEN(a$) TO 1 STEP -1
n$ = MID$(a$, n, 1)
SELECT CASE n$
CASE "6"
ar$ = ar$ + "9"
CASE "9"
ar$ = ar$ + "6"
CASE ELSE
ar$ = ar$ + n$
END SELECT
NEXT n
ar = VAL(ar$)
FOR n = LEN(b$) TO 1 STEP -1
n$ = MID$(b$, n, 1)
SELECT CASE n$
CASE "6"
br$ = br$ + "9"
CASE "9"
br$ = br$ + "6"
CASE ELSE
br$ = br$ + n$
END SELECT
NEXT n
br = VAL(br$)
IF (a MOD 10 > 0) AND (b MOD 10 > 0) AND (c MOD 10 > 0) THEN
IF ar * br = cr THEN PRINT a; "*"; b; "="; c
END IF
cr$ = "": ar$ = "": br$ = ""
skip2:
NEXT b
skip1:
NEXT a
END