したがって、プロジェクトオイラーでは、問題4は次のように述べています。
回文数は、両方の方法で同じように読み取られます。2つの2桁の数字の積から作られた最大の回文は9009=9199です。
2つの3桁の数字の積から作られた最大の回文を見つけます。
私は以下を試しました:
#include <stdio.h>
#include <stdlib.h>
int check(int result)
{
char b[7];
sprintf(b, "%d", result);
if (b[0] == b[5] && b[1] == b[4] && b[2] == b[3])
{
return 1;
}
else
{
return 0;
}
}
int main () {
int i;
int g;
int final;
for (i = 999; i > 99; i--)
{
for (g = 999; g > 99; g--)
{
if (check(g*i) == 1)
{
final = g*i;
goto here;
}
}
}
here:
printf("%d", final);
}
しかし、これは機能しません。正しい答えの代わりに、私は580085を取得します。これは、少なくとも回文であると思いますが、それでも正しい答えではありません。
私のプログラムを以下から説明しましょうint main
:
int i
とint g
は私の乗数です。それらは2つの3桁の数字です。int final
最大の回文を格納する数です。- すべての数の可能性を取得するために、2つのforループを開始します。
- 最初の回文に達したときにgotoを使用してループから抜け出します(おそらくそうすべきではありませんが、このような小さなプログラムにはあまり影響しません)。
- 上からカウントダウンしているので、最初の回文は可能な限り最大のものになるはずです。
私のチェックについて説明しましょう:
- まず、これらは2つの3桁の数値を掛け合わせて、その値を保持するために文字が必要なサイズを決定するためです。電卓に行って999 * 999を掛けると、6になり、1を足す必要があります。私が以前に投稿した、最後に文字を
sprintf
置く質問の1つから。\0
- さて、charとallができたので、
result
(i*g
にint main
)をコピーして、に入れましたchar b[7]
。 - 次に
b
、チェックする必要のある各スロットをハードコーディングして、それが自分自身と同じかどうかを確認しました。 - それから私はそれに応じて戻りました。1は真、2は偽です。
これは私には完全に論理的に思えますが、奇妙な理由で機能しません。ヒントはありますか?