2017-02-25 6 views
-1

最近、入力番号(以下のコード)の桁数を数えるC++プログラムを作成しました。プログラムはこのように動作します。ユーザは自然数xを入力するように求められます。次に、プログラムは、xが0に達するまで進行することを意図したwhileループに入れられる。yは、数字の最後の桁(すなわち、x=123y=3)を決定する簡単な方程式である。 D_sumは、xの数字の合計です(すなわち、x=123,d_sum=3)。 x=(x-y)/10は、次の数字の計算に役立ちます(例:x=(123-3)/10=120/10=12)。 10桁以上の数字を入力するまで、プログラムは正常に動作します(下の画面)。C++の桁合計programm whileループ

#include <iostream> 
#include <cstdlib> 
using namespace std; 

int main() 
{ 
    int x,y; 
    int d_sum = 0; 
    cout << "x= "; 
    cin >> x; 

    while(x > 0) 
    { 
     y=x % 10; 
     d_sum++; 
     x = (x - y)/10; 
    } 
    cout << d_sum << endl; 
    system("pause"); 

    return 0; 
} 

画面:

screen image

+0

プログラムは10桁を超える数字に対して正しく機能しません。何が問題ですか?それを修正するには? –

+2

あなたはこのリンクhttp://en.cppreference.com/w/cpp/language/typesを見ることができます。値の範囲のセクションを見てください –

+1

"10以上の数字を入れるまでプログラムはうまくいきます数字 "を入力します。 32ビット符号付きintで可能な最大桁数は10です.int(2^31)-1を超えると、intはオーバーフローし、未定義の動作を起こします。より大きい容量、つまり 'long'を使用するか、' long long'を使用するだけでよいでしょう。 – George

答えて

1

http://en.cppreference.com/w/cpp/language/types を見てみましょう、あなたのプラットフォームのintは32ビットであるのように見えます。例えばintが32ビットの場合、格納できる最大数は2^31 = 2147483648になります。