分享1个N进制转十进制的

ygm8611 2019-03-03 03:55:59


在按钮事件里写
//sValue 就是被转换的值 sFormat 就是被转换的值的取值范围如16进制就是0123456789ABCDEF iCarry 就是进制
iDecimal:=CarryToDecimal(sValue,sFormat,iCarry);
lbDecRet.caption:=IntToStr(iDecimal);

function CarryToDecimal(sSeqOfCarry,sFormat: string; iCarry: Integer): Integer;
var
i,j,iLenth,k1,k2,x: integer;
cc: char;
begin
sSeqOfCarry:=Trim(sSeqOfCarry); //需要被转成十进制的值X
k2 := iCarry; //X 的进制
if (sSeqOfCarry ='') then //居然是空的,十进制就是0
begin
Result:=0;
Exit;
end;
iLenth := length(sSeqOfCarry); //X的长度
j := iLenth;
x := 0;
repeat //思路:从X第低位到高位逐个取对应的值Y,找出Y的十进制是多少,确定Y要累乘进制多少次,然后累加
cc := sSeqOfCarry[j]; //变量j的作用就是从低位到高位取值用的。
k1 := pos(cc, sFormat)-1; //找出X当前位Y对应的十进制是多少 利用POS函数再减去1,sForamt 就是原始值的取值范围
for i := 1 to iLenth-j-1 do //确定Y要被累乘多少次
begin //iLength 就是X的长度 j就是当前位的索引 长度减去索引再减去1 就是累乘的次数
k2 := k2 * iCarry;
end;

if j = iLenth then //Y的索引和长度一样的时候取的肯定是最低位这个时候不需要累乘了,直接加就可以了
x := x + k1
else //累乘后把前面若干位求出的十进制累加
x := x + k1 * k2;
Dec(j);
until j=0;
Result := x;
end;

...全文
52 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
lyhoo163 2019-03-03
  • 打赏
  • 举报
回复

16,749

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧