gpt4 book ai didi

C : Sum of reverse numbers

转载 作者:太空狗 更新时间:2023-10-29 14:57:10 25 4
gpt4 key购买 nike

所以我想用 C 或 SML 解决一个练习,但我只是想不出一个算法来做到这一点。首先我会写练习,然后是我遇到的问题,所以你可以帮助我。
练习

We define the reverse number of a natural number N as the natural number Nr which is produced by reading N from right to left beginning by the first non-zero digit. For example if N = 4236 then Nr = 6324 and if N = 5400 then Nr = 45.

So given any natural number G (1≤G≤10^100000) write a program in C that tests if G can occur by the sum of a natural number N and its reverse Nr. If there is such a number then the program must return this N. If there isn't then the program must return 0. The input number G will be given through a txt file consisted only by 1 line.


例如,使用 C,如果 number1.txt 包含数字 33,则程序的指令为:
> ./sum_of_reverse number1.txt
例如可以返回 12,因为 12+21 = 33 或 30,因为 30 + 3 = 33。如果 number1.txt 包含数字 42,则程序将返回 0。
现在在 ML 中,如果 number1.txt 包含数字 33,则程序的指令为:
sum_of_reverse "number1.txt"; 
它会返回:
val it = "12" : string

The program must run in about 10 sec with a space limit : 256MB


我遇到的问题
  • 起初,我试图找到模式,即具有此属性的数字。我发现像 11,22,33,44,888 这样的数字或像 1001、40004、330033 这样的数字可以很容易地写成反向数字的总和。但后来我发现这些数字似乎无穷无尽,因为例如 14443 = 7676 + 6767 或 115950 = 36987 + 78963。
  • 即使我尝试将上述所有模式都包含在我的算法中,对于非常大的数字,我的程序也不会在 10 秒内运行,因为我必须找到给定数字的长度,这需要很多时间。
  • 因为数字将通过 txt 给出,如果数字为 999999 位,我想我无法将这个整数的值传递给变量。结果也是一样。我假设您要先将其保存到 txt 中,然后再打印?

  • 所以我假设我应该找到一个算法,从 txt 中获取一组数字,检查它们是否有东西,然后继续下一组数字......?

    最佳答案

    我认为您应该将您的数字作为 C 字符串处理。这可能是快速找到数字反转的最简单方法(向后读取 C 缓冲区中的数字......)然后,有趣的部分是编写一个“大数字”数学例程进行加法。这并不像您想象的那么难,因为加法一次只处理一位,并有可能将进位值带入下一位。

    然后,对于第一遍,从 0 开始,看看 G 是否是它的反向。然后是 0+1 和 G-1,然后……继续循环直到 G/2 和 G/2。对于大量数字,这很可能需要 10 秒以上,但这是一个很好的起点。 (请注意,像这样大的数字还不够好,但它将构成 future 工作的基础。)

    在此之后,我知道有一些数学捷径可以用来让它更快(不同长度的数字不能相互反转 - 保存尾随零,从中间(G/2)开始并向外计算长度是相同的,比赛被更快地捕获,等等)

    关于C : Sum of reverse numbers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36782075/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com