所以我想解决C或SML中的练习,但我不能想出一个这样做的算法.首先,我将编写练习,然后编写我遇到的问题,这样你就可以帮助我了.
行使
我们将自然数N的反向数定义为自然数Nr,它是通过从第一个非零数字开始从右向左读N来产生的.例如,如果N = 4236则Nr = 6324并且如果N = 5400则Nr = 45.
因此,给定任何自然数G(1≤G≤10^ 100000)在C中编写程序,该程序测试G是否可以通过自然数N和其反向Nr的总和出现.如果有这样的数字,则程序必须返回此N.如果没有,则程序必须返回0.输入数字G将通过仅由1行组成的txt文件给出.
例如,使用C,如果number1.txt包含数字33,那么程序带有指令:
> ./sum_of_reverse number1.txt
Run Code Online (Sandbox Code Playgroud)
可以返回例如12,因为12 + 21 = 33或30因为30 + 3 = 33.如果number1.txt包含数字42,则程序将返回0.
现在在ML中如果number1.txt包含数字33那么程序带有指令:
sum_of_reverse "number1.txt";
Run Code Online (Sandbox Code Playgroud)
它将返回:
val it = "12" : string
Run Code Online (Sandbox Code Playgroud)
程序必须在大约10秒内运行,空间限制:256MB
我遇到的问题
起初我试图找到模式,这个属性存在的数字.我发现像11,22,33,44,888这样的数字或像1001,40004,330033这样的数字可以很容易地写成反向数字的总和.但后来我发现这些数字似乎无穷无尽,因为例如14443 = 7676 + 6767或115950 = 36987 + 78963.
即使我尝试将所有上述模式都包含在我的算法中,我的程序也不会在10秒内运行非常大的数字,因为我必须找到给定的数字的长度,这需要花费很多时间.
因为数字将通过txt给出,如果数字为999999位数,我猜我不能将这整数的值传递给变量.与结果相同.我假设你要先将它保存到txt然后打印出来?
所以我假设我应该找到一个从txt中获取一组数字的算法,检查它们的某些内容然后继续下一组数字...?