DIM b AS DOUBLE DIM bas AS DOUBLE INPUT "Base to convert from (16): ", b IF b = 0 THEN b = 16 SELECT CASE b CASE IS <= 10 PRINT "Number to convert from in base"; b; "(no commas): "; INPUT "", n$ ln = LEN(n$) FOR digit = 0 TO ln - 1 tmp$ = MID$(n$, ln - digit, 1) num# = num# + VAL(tmp$) * b ^ digit NEXT CASE IS <= 36 PRINT "Alphadecimal number to convert from in base"; b; ": "; PRINT "(CR if alphadecimal is not preferred)" INPUT "", n$ IF n$ = "" THEN GOTO 5 n$ = UCASE$(n$) ln = LEN(n$) FOR digit = 0 TO ln - 1 tmp = ASC(MID$(n$, ln - digit, 1)) IF tmp <= 57 THEN tmp = tmp - 48 ELSE tmp = tmp - 55 num# = num# + tmp * b ^ digit NEXT CASE ELSE 5 PRINT "Enter value in base"; b; "as a series of values for each digit, expressed in decimal, most significant digit first, separated by single spaces: "; INPUT "", n$ ln = LEN(n$) digits = 1 FOR s = 1 TO ln tmp$ = MID$(n$, s, 1) IF tmp$ = " " THEN digits = digits + 1 NEXT digit = digits - 1 FOR s = 1 TO ln tmp$ = MID$(n$, s, 1) IF tmp$ = " " THEN num# = num# + VAL(tmpnum$) * b ^ digit digit = digit - 1 tmpnum$ = "" ELSE tmpnum$ = tmpnum$ + tmp$ END IF NEXT num# = num# + VAL(tmpnum$) END SELECT IF b = 10 THEN defbas = 16 ELSE defbas = 10 PRINT "Base to which to convert number ("; defbas; "): "; INPUT "", bas IF bas = 0 THEN bas = defbas IF bas > 36 THEN PRINT "Expressed as a series of values for each digit, in decimal, most significant digit first: " maxdig = INT(LOG(num#) / LOG(bas)) FOR digit = maxdig TO 0 STEP -1 FOR value = bas - 1 TO 0 STEP -1 IF value * bas ^ digit <= num# THEN num# = num# - (value * (bas ^ digit)) SELECT CASE bas CASE IS <= 10 PRINT LTRIM$(RTRIM$(STR$(value))); CASE IS <= 36 IF value < 10 THEN PRINT LTRIM$(RTRIM$(STR$(value))); ELSE PRINT CHR$(value + 55); CASE ELSE PRINT value; END SELECT GOTO 10 END IF NEXT 10 NEXT 'bas=2 'num#=3 'n=2 'num#=4 'n=3 'num#