这是来自Project Euler的一个问题,并且这个问题包含一些源代码,因此请将此视为您的剧透警报,以防您有兴趣自己解决它。不鼓励分发问题的解决方案,这不是我想要的。我只需要在正确的方向上善意地推动和指导。
问题如下:
2^15 = 32768,其数字之和为 3 + 2 + 7 + 6 + 8 = 26。
2^1000的各位数字之和是多少?
我理解问题的前提和数学,但我一周前才开始练习 C#,所以我的编程充其量是不稳定的。
我知道 int、long 和 double 对于精确地保存 2^1000 的 300+(以 10 为底)数字是完全不够的,所以需要一些策略。我的策略是设置一个逐位获取数字的计算,并希望编译器能够弄清楚如何计算每个数字而不会出现溢出等错误:
using System;
using System.IO;
using System.Windows.Forms;
namespace euler016
{
class DigitSum
{
// sum all the (base 10) digits of 2^powerOfTwo
[STAThread]
static void Main(string[] args)
{
int powerOfTwo = 1000;
int sum = 0;
// iterate through each (base 10) digit of 2^powerOfTwo, from right to left
for (int digit = 0; Math.Pow(10, digit) < Math.Pow(2, powerOfTwo); digit++)
{
// add next rightmost digit to sum
sum += (int)((Math.Pow(2, powerOfTwo) / Math.Pow(10, digit) % 10));
}
// write output to console, and save solution to clipboard
Console.Write("Power of two: {0} Sum of digits: {1}\n", powerOfTwo, sum);
Clipboard.SetText(sum.ToString());
Console.WriteLine("Answer copied to clipboard. Press any key to exit.");
Console.ReadKey();
}
}
}
它似乎对 powerOfTwo < 34 非常有效。我的计算器用完了有效数字,所以我无法测试更高的幂。但是跟踪程序,似乎没有发生溢出:计算的位数随着 powerOfTwo = 1000 的增加而逐渐增加,并且位数的总和也(平均)随着 powerOfTwo 的增加而增加。
对于我应该执行的实际计算,我得到输出:
2 的幂:1000 数字总和:1189
但 1189 不是正确答案。我的程序有什么问题?我对任何和所有建设性的批评持开放态度。