**[**Back to SORTING SWAG index**]** **[**Back to Main SWAG index**]** **[**Original**]**

`Turbo `**Pascal **Optimization Contest # 51.
No tangible prizes, just some bragging rights, **and **a brain workout.
Assignment: Write conversion routines similar **to **VAL **and **STR that can
handle a radix (base) **of **any number. **For **example, below **is
**a straight **Pascal Procedure to **convert a **String of **any base
**to **a LongInt. Can you improve the speed **of **this routine,
**and **Write a correspondingly fast routine **to **convert from a
LongInt **to **a **String of **any base?
Rules: No rules. BAsm **is **allowed, **as **long **as **the Functions are
readily Compilable without the use **of **TAsm.
Judging: Code will be tested **on **a 386-40 **on **March 10th, by being
placed into a loop **With **no output, like this:
StartTiming;
**For **Loop := 1 **to **10000000 *{ ten million } ***do
***{ Execute the test, no output }
*WriteLn(StopTiming);
Ready, **set**, code! Here's the sample...
*(* This Function converts an ASCIIZ String S in base Radix to LongInt I
* With no verification of radix validity. The calling Programmer is
* responsible For insuring that the radix range is 2 through 36. The
* calling Programmer is also responsible For insuring that the passed
* String contains only valid digits in the specified Radix. No checking
* is done on the individual digits of a given String. For bases 11-36
* the letters 'A'-'Z' represent the corresponding values.
*)
***Procedure **StrtoLong(**Var **I : LongInt; S : PChar; Radix : Integer);
**begin
**I := 0;
**While **S[0] <> #0 **do
begin
Case **S[0] **of **'0'..'9' : I := I * Radix + (ord(S[0])-48);
'A'..'Z' : I := I * Radix + (ord(S[0])-54);
'a'..'z' : I := I * Radix + (ord(S[0])-86);
Inc(s);
**end**;
**end**;

**[**Back to SORTING SWAG index**]** **[**Back to Main SWAG index**]** **[**Original**]**