SML/NJ中如何打印IntInf.int类型的大整数?
在SML/NJ中打印IntInf.int类型的大整数
当然有办法解决这个问题!你踩的坑很常见——Int.toString确实只支持标准的固定精度int类型,而IntInf.int是任意精度的大整数类型,得用专门的工具来处理它的字符串转换。
下面给你两种实用的方法:
使用
IntInf.toString(最直接的方式)
这个函数是专门为IntInf.int类型设计的转换工具,能把任意大小的IntInf.int数值转成字符串,配合print就能输出到标准输出了。示例代码:val my_large_int = IntInf.pow(10, 50); (* 生成10的50次方这个超大整数 *) print(IntInf.toString(my_large_int) ^ "\n"); (* 转换后打印,加换行让输出更整洁 *)利用SML/NJ的交互式REPL自动打印
如果你是在SML/NJ的交互环境里测试,根本不用手动调用转换函数——直接输入你的IntInf.int变量或者表达式,回车后REPL会自动帮你解析并打印出数值。比如:- IntInf.pow(2, 200); val it = 1606938044258990275541962092341162602522202993782792835301376 : IntInf.int这种方式在快速验证大整数计算结果的时候特别高效。
另外补充个小知识点:在SML/NJ里,LargeInt.toString其实和IntInf.toString是等价的(因为LargeInt是IntInf的别名),所以用它也能达到同样的效果,但直接用IntInf.toString会更清晰,明确你是在处理任意精度整数。
如果你的大整数是从普通int转换过来的,别忘了先用IntInf.fromInt把普通整数转成IntInf.int类型,再进行后续的转换和打印操作哦。
内容的提问来源于stack exchange,提问作者StrikeLeader
相关产品推荐
相关产品推荐

