Program written in TI-Basic that works on TI-83/84/+/SE calculators. Automatically detects whether input is a number of a Roman numeral, and converts to the opposite. Please try to optimize for size, if possible.
DelVar IDelVar VDelVar XDelVar LDelVar CDelVar DDelVar MClrHome
Input Str1
expr(Str1->A
If A
Then
A->B
"?->Str2
For(I,1,iPart(A/|E3
Str2+"M->Str2
B-|E3->B
End
If B>899
Then
Str2+"CM->Str2
B-900->B
End
If B>499
Then
Str2+"D->Str2
B-500->B
End
If B>399
Then
Str2+"CD->Str2
B-400->B
End
B->A
For(I,1,iPart(A.01
Str2+"C->Str2
B-|E2->B
End
If B>89
Then
Str2+"XC->Str2
B-90->B
End
If B>49
Then
Str2+"L->Str2
B-50->B
End
If B>39
Then
Str2+"XL->Str2
B-40->B
End
B->A
For(I,1,iPart(A.1
Str2+"X->Str2
B-10->B
End
If B=9
Then
DelVar BStr2+"IX->Str2
End
If B>4
Then
Str2+"V->Str2
B-5->B
End
If B=4
Then
DelVar BStr2+"IV->Str2
End
For(I,1,B
Str2+"I->Str2
End
sub(Str2,2,length(Str2)-1
Else
"?"+Str1+"?->Str1
For(I,0,5
inString(Str1,sub("IVIXXLXCCDCM",2I+1,2
If Ans
Then
sub(Str1,1,Ans-1)+sub(Str1,Ans+2,length(Str1)-Ans-1->Str1
C+(4+10fPart(I/2))10^(iPart(I/2->C
End
End
For(I,1,length(Str1
inString("IVXLCDM",sub(Str1,I,1
If Ans
C+(5-8fPart(Ans/2))10^(iPart(.5(Ans-1->C
End
C
End
Ans
IV
, though.1->I:5->V:10->X:50->L:2Ans->C:5Ans->D:2Ans->M
:Input Str9
:Σ(expr(sub(Str9,A,1),A,1,length(Str9
\$\endgroup\$