これは Project Euler の問題であり、この質問にはいくつかのソース コードが含まれているため、自分で解決することに興味がある場合は、ネタバレ注意を考慮してください。問題の解決策を配布することはお勧めできません。それは私が望んでいることではありません。誠意を持って、正しい方向への少しのナッジとガイダンスが必要です。
問題は次のように書かれています。
2^15 = 32768 で、その桁の合計は 3 + 2 + 7 + 6 + 8 = 26 です。
2^1000 の桁数の和は何桁ですか?
問題の前提と計算は理解していますが、C# の練習を始めてまだ 1 週間も経っていないので、私のプログラミングはせいぜい不安定です。
int、long、および double は、2^1000 の 300 桁以上 (基数 10) を正確に保持するには絶望的に不十分であることを知っているため、何らかの戦略が必要です。私の戦略は、桁を 1 つずつ取得する計算を設定し、コンパイラがオーバーフローのようなエラーなしで各桁を計算する方法を見つけられることを期待することでした。
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 は正しい答えではありません。プログラムの何が問題になっていますか? 私はあらゆる建設的な批判を受け入れます。