Это проблема от Project Euler, и этот вопрос включает в себя некоторый исходный код, так что считайте это предупреждением о спойлере, если вы хотите решить эту проблему самостоятельно. Не рекомендуется распространять решения проблем, и я не хочу этого. Мне просто нужен небольшой толчок и добросовестный совет в правильном направлении.
Проблема заключается в следующем:
2 ^ 15 = 32768, а сумма цифр 3 + 2 + 7 + 6 + 8 = 26.
Какова сумма цифр числа 2 ^ 1000?
Я понимаю предпосылку и математику проблемы, но я начал практиковать C # только неделю назад, поэтому мое программирование в лучшем случае шаткое.
Я знаю, что int, long и double безнадежно неадекватны для точного хранения 300+ (базовых 10) цифр 2 ^ 1000, поэтому нужна какая-то стратегия. Моя стратегия заключалась в том, чтобы установить вычисление, которое получает цифры одну за другой, и надеяться, что компилятор сможет выяснить, как вычислить каждую цифру без какой-либо ошибки, такой как переполнение:
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.
Для фактического расчета, который я должен выполнить, я получаю результат:
Степень двойки: 1000 Сумма цифр: 1189
Но 1189 - неправильный ответ. Что не так с моей программой? Я открыт для любой конструктивной критики.