【发布时间】:2013-06-13 08:50:18
【问题描述】:
这是一个问题陈述。
考虑一个数字 2345。如果将其数字相乘,则得到数字 120。现在,如果再次将 120 的数字相乘,则将得到数字 0,即一位数。如果我添加 2345 的数字,那么我将得到 14。如果我添加 14 的数字,那么我将得到 5,这是一个数字。
因此,任何数字都可以在一定数量的步骤中转换为两个一位数。您可以看到 2345 通过使用 2 步中的数字相乘转换为 0,并通过使用 2 步中的数字加法将其转换为 5。现在考虑任何数字 N。假设它可以通过 n1 步将数字乘以一位数字 d1 并通过 n2 步将数字与一位数字数字 d2 相加来转换。
您的任务是找到大于 N 且小于 1000000000 的最小数,可以通过在小于或等于 n1 步内将其数字乘以 d1 并在小于或等于 n2 步内将其数字与 d2 相加来转换.
如何在 C# 中解决它...
【问题讨论】:
-
切换到 64 位系统。
-
内存中有 10 亿个字符串肯定会导致内存不足。也许您应该只添加符合您条件的字符串?
-
您正在创建一个包含 1000000000 个字符串的数组。当然你的内存用完了。
-
@HenkHolterman 数组被限制为 2GB 连续字节,并且引用将占用 4 个字节(或者在 64 位构建上为 8 个字节?)无论哪种方式,即使是 64 位系统也不能有数组有那么多参考资料。
-
您已经多次问过这个问题了。这正是您遇到的确切问题,只是这一次,您需要计算步数。