ちょうど今、私はC言語で++のコードを使ってナルシシジスなのかどうかを判断し、私は最も独特なものを見つけました。私はナルシシスティックな数字9800817と9926315の関数 "IsNumberNarcissistic"で間違った和を得ています。私が得た合計は、常に1より小さく、それぞれ9800816と9926314です。しかし、変数sumをdoubleとして宣言することで問題は解決されます。Code :: Blocks 13.12 C++の間違った答えの合計
私の質問は、ここで何が起こっているのですか?それはCode:Blocks関連の問題なのでしょうか?私はコードを使用しています:ブロック13.12。前もって感謝します。
PS。私がこの機能で作ったプリントを気にしないで、変数値を見るためにそこに置いておきます。
#include <iostream>
#include <vector>
#include <cmath>
#include <iomanip>
using std::cin; using std::cout; using std::endl;
std::vector<int> extractDigits(int n)
{
std::vector<int> digits;
while (n>0)
{
digits.push_back(n%10);
n/=10;
}
return digits;
}
bool IsNumberNarcissistic(int n)
{
auto digits = extractDigits(n);
int sum(0);
int power = digits.size();
for (int digit : digits) sum += std::pow(digit, power);
for (int digit : digits) cout << std::setprecision(10)
<< std::pow(digit, power) << endl;
cout << endl << endl << sum;
return (sum == n);
}
int main()
{
IsNumberNarcissistic(9800817);
}
_ "それはコードです:ブロックに関連する問題、または何か他のもの?" _私が言うと思います何か他のもの。 IDEはめったに原因ではありません。ターゲットプラットフォームとツールチェーンの使用に関連しています。 –
['std :: pow'](http://en.cppreference.com/w/cpp/numeric/math/pow)は浮動小数点関数なので、丸めの問題につながる可能性があることに注意してください。 –
あなたの問題は、おそらく 'sum + = std :: pow(digit、power)'から来るでしょう。デバッガを使用してコードをステップ実行する方法を学ぶ必要があるようです。良いデバッガを使用すると、プログラムを1行ずつ実行し、どこからずれているかを確認することができます。これはプログラミングをする場合に不可欠なツールです。詳しい読書:** [小さなプログラムをデバッグする方法](http://ericlippert.com/2014/03/05/how-to-debug-small-programs/)** – NathanOliver