在VFP中怎么进行大数(至少128字节)的运算
发布时间:2010-05-24 22:04:12 文章来源:www.iduyao.cn 采编人员:星星草
在VFP中如何进行大数(至少128字节)的运算
在VFP中如何进行大数(至少128字节)的运算,而且还要支持16进制等其他进制的问题。
------解决方案--------------------
接上
*!* Function ll_div divides integer, represented by strings m.s1 by the
*!* integer, epresented by m.s1. (int(m.s1/m.s2)). If parameter m.md is
*!* passed by reference, mod(m.s1,m.s2) is returned in m.md
Function ll_div
Lparameter m.s1, m.s2, m.md
Do Case
Case Left(m.s1,1) = "-" And Left(m.s2,1) <> "-"
Return "-" + ll_div(Substr(m.s1,2), m.s2)
Case Left(m.s1,1) <> "-" And Left(m.s2,1) = "-"
Return "-" + ll_div(m.s1, Substr(m.s2,2))
Case Left(m.s1,1) = "-" And Left(m.s2,1) = "-"
Return ll_div(Substr(m.s1,2), Substr(m.s2,2))
Endcase
*!* Uncomment next rows if you want some additional data checking,
*!* but this may dramaticaly reduce performance on large strings
*!* local m.ln1, m.ln2, m.sm, m.i, m.ts1, m.ts1e, m.cnt
*!* if len(chrtran(m.s1, "0123456789", "")) > 0
*!* wait window "Long_ar: error in s1"
*!* return ""
*!* endif
*!* if len(chrtran(m.s2, "0123456789", "")) > 0
*!* wait window "Long_ar: error in s2"
*!* return ""
*!* endif
If ll_less(m.s1, m.s2)
m.md = m.s1
Return "0"
Endif
Local m.ln1, m.ln2, m.sm, m.i, m.ts1, m.ts1e, m.cnt
m.ln2 = Len(m.s2)
m.sm = ""
m.ts1 = Left(m.s1, m.ln2)
m.ts1e = Substr(m.s1, m.ln2 + 1)
m.ln1 = Len(m.ts1e)
For m.i = 1 To m.ln1 +1
m.cnt = 0
Do While !ll_less(m.ts1, m.s2)
m.ts1 = ll_sub(m.ts1, m.s2)
m.cnt = m.cnt + 1
Enddo
m.sm = m.sm + Allt(Str(m.cnt))
m.ts1 = m.ts1 + Left(m.ts1e, 1)
m.ts1e = Substr(m.ts1e, 2)
Next
m.sm = tr0(m.sm)
m.md = m.ts1
Return m.sm
*!* Function ll_mod returns mod(m.s1, m.s2)
Function ll_mod
Lparameter m.s1, m.s2
Do Case
Case Left(m.s1,1) = "-" And Left(m.s2,1) <> "-"
Return ""
Case Left(m.s1,1) <> "-" And Left(m.s2,1) = "-"
Return ""
Case Left(m.s1,1) = "-" And Left(m.s2,1) = "-"
Return ""
Endcase
Local m.md
ll_div(m.s1, m.s2, @m.md)
Return m.md
*!* Function ll_less compare two integers, represented by m.s1 and m.s2.
*!* .t. is returned if m.s1 < m.s2
Function ll_less
Lparameter m.s1, m.s2
Do Case
Case Left(m.s1,1) = "-" And Left(m.s2,1) <> "-"
Return .T.
Case Left(m.s1,1) <> "-" And Left(m.s2,1) = "-"
Return .F.
Case Left(m.s1,1) = "-" And Left(m.s2,1) = "-"
Return ll_less(Substr(m.s2,2), Substr(m.s1,2))
Endcase
m.s1 = tr0(m.s1)
m.s2 = tr0(m.s2)
Return Len(m.s1) < Len(m.s2) Or (Len(m.s1) = Len(m.s2) And m.s1 < m.s2)
*!* Function tr0 is used by function ll_less
Function tr0
Lparameter m.s1
Do While Left(m.s1, 1) = "0" And Len(m.s1) > 1
m.s1 = Substr(m.s1, 2)
Enddo
Return m.s1
*!* Funnction ll_intsqrt returns mod(m.s1, m.s2)
Function ll_intsqrt
Lparameter m.s1
*!* Uncomment next rows if you want some additional data checking,
*!* but this may dramaticaly reduce performance on large strings
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
菜鸟求一句命令
我做VC的,没做过VFP,完全不懂,帮人问一句命令,谢谢各位大牛们帮忙。
“我有两张表,称为A表,B表,其中B表数据很多,我现在...
-
求助:实现grid修改后直接后直接更新到数据表里
各位道友,小弟有两个问题
1。如何实现在grid表格里直接修改数据;
2。修改的数据可直...
-
请问treeview 里面如何选择性展开其中某树枝及其获得焦点?
请问如何在treeview里面,如何实现选择性展开其中的某枝,原本是全部收起来...
-
vfp中treeview控件的用法
我在VFP中使用了treeview控件,我对treeview中的某一个节点的文本修改了,怎么在treeview窗口中进行就更。
...
-
求编排考号问题
需求是这样的,如1年级有8个班,那么考号编排规则是:第1个班的第一个学生考号为1号,第2个班的第一个学生考号为2号,以此...
-
大家讨论,对现有vfp6.0产品只升级为sql server数据库有必要吗?
功能保留原来 只是数据库变化
我本人觉得会丧失很多vfp 本身文...
-
表单中的出错,第一次遇到
VFP9.0中新建了一个表单
表单中,增加一个command1,使其width=25
然后,将此按钮,复制150个出来. (此时...
-
VFP 如何做一个类似word控件?
如题。
类似于电子病历的那种控件。可以像word一样的编辑文件、表格、图片等
可以直接取数据库的数...
-
vfp使用Msxml2.ServerXMLHTTP的乱码问题
oo = = newObject('Msxml2.ServerXMLHTTP')
oo.open('post','http://localhost/',.f.)
o...
-
表中定位 如下 记录 seek办不到
表结构
dlh fb
100 5
110 2
112 3
........
假如 我想查找 dl...