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