入力した整数の数値に対して、上位3桁ごとに「&」を挟み表示するプログラム【初心者プログラム日記】

まいてつを最近プレイしてます。もっとアペンドディスク出して♡

#include<stdio.h>

int main(void)
{
	int x,y[256],count = 0,M;
	printf("整数を入力してください > ");
	scanf("%d", &x);

	while (x != 0) {
		y[count] = x % 10;
		x = x / 10;
		count++;
	}

	for (int i = 0; i <= (count-1)/2; i++)
	{
		M = y[i];
		y[i] = y[(count-1) - i];
		y[(count-1) - i] = M;
	}

	for (int N = 0; N <= count-1; N++)
	{
		printf("%d", y[N]);
		if (N % 3 == 2) {
			printf("&");
		}
	}
	printf("\n");
	return 0;
}

配列について理解が本当に進んでいないのですが、とりあえず課題として出されたものを消化した形になります。

そもそも、与えられた数値に対してどう分解して対処するかというのが分からずかなり苦労しました。解き方のヒントがなかったらまず死んでたので、こういう問題にたいする解を素でパッと思いつく人はすごい。

ポイントは「配列の最後に\0」が入ること。

つまるところ、カウント関数使うにもfor文の継続条件を書くにしろ「\0の部分を引かなければいけない」ということである。これがないと、-88938472みたいな終端文字に対する操作特有のやばい数値が出る。


このコード自体の操作はいたって単純で、与えられた数値に対して10で割ったあまりを一つずつ配列に格納、これを0になるまで行う。

その後、1の位から算出するため順序が逆になっているので、入れ替え操作を行い順序を正す。

最後にfor文で配列の中身を一つずつ出力するプログラムを組む。その際、if文で割ったあまりが2(配列は0がスタートのため)になる時「&」を挟むようにする。


AtCoderとか出てみたいので、C++にも同時進行で触ってみたいけど、多分下手に色々手を出すと死にそうなのでもう少しはC触ります・・・。

もしお金を頂いた場合は、色々なゲームやるためのパソコン買うための費用にする予定です。