一个基础算法问题(50分)

  • 主题发起人 主题发起人 逆水
  • 开始时间 开始时间

逆水

Unregistered / Unconfirmed
GUEST, unregistred user!
有这样一个题目,要求将一串十六进制数每次取出两位相加。
我是这样处理的,为了防止将如:01、02之类的数前面的零在STRTOINT时被消掉,我每取出两位都给它们加上33,最终计算数值时再将加上去的33去掉。可我发现如这串数中有FA、FC、FD之类的数时,加数值会变成三位,这样我的公式只取到后面两位,结果就错误了。
那位兄弟请告诉我还有什么办法实现我的要求。
我的代码:
EDIT1。TEXT=s:='34567890FEF2F5F2'
for i:=1 to (length(S) div 2)do
s1:=s1+copy(IntToHex(StrToInt64((inttostr(strtoint(IntToStr(StrToInt64('$'+copy(s,2*i-1,2))))+51))),0),length(IntToHex(StrToInt64((inttostr(strtoint(IntToStr(StrToInt64('$'+copy(s,2*i-1,2))))+51))),0))-2*i+1,2) ;//每取出两位加33;
for i:=1 to (length(S) div 2)do
i1:=i1+ strtoint64('$'+copy(s1,2*i-1,2)) ;
s3:=inttostr(i1-((length(s) div 2)*51));//最终计算出的结果;
上面的方法很笨,见笑了。
 
题目好象没说完吧。
“要求将一串十六进制数每次取出两位相加。”
对相加后的结果有什么要求呢?
 
对不起,加后的结果取出取出最后面两位,就是溢出的去掉。其它没有啦。
结果用一显示在EDIT中就行啦。
 
每取出两位换算成10进制,然后累加就行了。
加完了再换算成16进制
再截取最后2位。
 
换个思路试试,既然是16进制,那每次取出的16进制数先转换成
10进制,然后进行处理,相加后再转换成16进制。
 
实际上我们可以换种思路来
对某十进制数每次取N位相加后取M位--这简单得很,不断的 mod 10就可以了。
十六进制数取N位实际上就是移位呀(不断的除2)
十六进制数取两位如下:
s and chr($ff)
 
简单的高精度运算
 
LNCD、CHNPLZH:两位老兄的说法是对的,LICHDR老兄的说法也对,但不是我要的。
问题解决了,真是一言点醒梦中人啊。呵呵。
 
接受答案了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部