ページ 11

桁数の数え方

Posted: 2016年2月29日(月) 12:04
by チタン合金

コード:

#include<iostream>
 
    int main(void){
          using std::cout;
          using std::cin;

           int a;
           int keta = 0;
 
          cout << "整数値を入力せよ:";
           cin  >> a;

          do {
              a  = a  / 10;
              keta++;
} while (a);
cout << "その数は"<< keta << "桁です。\n";

 cin.ignore();
 getchar();
 return(0);
この通りやれば、ビルドはできるのですが、この問題に関して、

桁数の数え方というのがあるのですが、どういう事なのか、意味が解りません。

a の場合  123 → 12  → 1 → 0 //10で割っていく
ketaの場合  0→  1 →  2 →3 //1ずつ増やしていく
意味が解らないので教えて下さい。

Re: 桁数の数え方

Posted: 2016年2月29日(月) 13:16
by チタン合金、
ketaが解らなかったのですが、なんとなく解りました^^;

後よければ、doの部分の式が、0になった時終了とありますが、どこで終了しているのか教えて頂ければ、幸いですorz

Re: 桁数の数え方

Posted: 2016年2月29日(月) 16:27
by チタン合金
とりあえず、解決にしときますー。

Re: 桁数の数え方

Posted: 2016年2月29日(月) 16:46
by Hiragi(GKUTH)
インデントがぐちゃぐちゃ(というか最後のカッコが抜けてる?)ですので揃えることを意識してください。

コード:

#include <iostream>

int main(void) {
	using std::cout;
	using std::cin;

	int a;
	int keta = 0;

	cout << "整数値を入力せよ:";
	cin >> a;

	do {
		a = a / 10;
		keta++;
	} while (a);
	cout << "その数は" << keta << "桁です。\n";

	cin.ignore();
	getchar();
	return(0);
}
一行一行何をしているか書き出してみましょう。


例えば465(適当な数値)を入力します。

doよりループに入ります。

10で割ると 46.5 です、int型ですので小数点は切り捨てられ、aの内容は46になります。

ketaに1加算されます。 この時ketaの内容は1です。

whileよりカッコ内が0で有ればループを抜けるので、現在aの内容は46ですのでdoに戻ります。

同様にaは46 から 4(4.6) , ketaは1から2
whileはaが4ですのでまたdoに戻る

またまた同様にaは4 から 0(0.4) , ketaは2から3
whileはaが0ですのでdoに戻らず次の行に進みます。

この時ketaは3です。
465は3ケタ... 分かったでしょうか?

Re: 桁数の数え方

Posted: 2016年2月29日(月) 18:04
by チタン合金
なるほど、解りましたー、解りやすい説明ありがとうございます。m(__)m
これからは、自分の力でも理解できるように頑張ります。

Re: 桁数の数え方

Posted: 2016年2月29日(月) 23:15
by 超初級者
こんなのでもよかったりして…。

コード:

#include <iostream>
#include <cmath>

using namespace std;

int main(void)
{
     int n;

     cout << "Input an integer:";
     cin >> n;
     cout << (int) (log10((double) n) + 1) << "\n";
     return 0;
}

Re: 桁数の数え方

Posted: 2016年3月01日(火) 04:55
by チタン合金
>>超初級者さん
今は、まだ理解ができていませんが、参考にさせて頂きます。
ありがとうございます。