C++ 自制一门编程语言

回复帖子

@华法琳血怒 2021-09-15 10:19 回复

CSP 2021 RP++!

Python 自带高精度,Java 的 BigInteger 类,唯独 C++ 没有高精度,真令人头疼……

FScript 现在正式加入高精度!

还是那四个传送门:

Github问题反馈使用手册源代码

FScript 目前版本 3.91,支持如下功能:

  • 变量,支持数字、字符串、true/false、数组(允许使用 a["test"] 这样的语法);

  • 函数定义、调用与递归、高阶函数、Lambda 表达式;

  • 键盘与文件的 I/O 操作;

  • if for while 语句;

  • 大量内置函数,以及一部分操作系统 api (仅支持Windows)

  • 点语法操作,即 a.test 等价于 a["test"]

  • 编译成特定格式的 ff0 文件,支持 import

  • 支持伪代码和普通代码混写 (打开 -p 开关)

  • 支持反编译成 JavaScript(一部分内置函数不会给出对应的实现)

  • 支持DLL文件 也就是本地方法的调用。这个编写有点复杂,建议初学者先不要尝试

新版本还加上一条:

  • 支持高精度整数。感谢 @Overflow 提供的高精度类。

现在在计算过程中,如果发现数字大于 INT_MAX 也就是……额……$2147483647$,就会自动转换成高精度计算。

高精度的使用和实数基本没有区别,除了两点:

  • 目前版本不支持取模;

  • 目前版本高精度属于整数类型,小数会被忽略。

怎么使用呢?很简单,两种方式:

  • 直接使用超过 INT_MAX 的常量,比如 a=424242424242424242424 就行了;

  • 大整数没有配套对应的读入函数,所以额外提供了一个 big 函数,调用方式为 big("424242424242424242424"),从字符串构造一个大整数。读入就可以写成 big(read_string()) 了。

那么,高精度版的 A + B 就是这么写的:

a = big(read_string())
b = big(read_string())
print(a + b)

更简单点:

print(big(read_string()) + big(read_string()))

最后这个送给参加 CSP 的各位 OIer 们。

while(true) print("BlowDusk")

啊,弄错了弄错了,重来:

rp = big("2")
while(true) {
    rp = rp * 2
    print("CSP 2021 RP = " + rp)
}

记得留下一个 BlowDusk 再走哦,项目持续更新。

P.S. 喷子请点击这里

@Laffey 2021-09-15 10:20 回复 举报

qpzc!本次高精度模块由我提供,与ff0大佬的合作非常愉快qwq 顺便宣传一下我们的OI重开模拟器()

反馈
如果你认为某个帖子有问题,欢迎向洛谷反馈,以帮助更多的同学。



请具体说明理由,以增加反馈的可信度。