配列の要素の操作が上手く行きません。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
新riyn

配列の要素の操作が上手く行きません。

#1

投稿記事 by 新riyn » 13年前

C初心者なのですが、ネットで見かけたプログラミングコンテストの問題を解いてみようと思って色々試行錯誤しているのですが配列操作が上手く行きません。
問題は、例えば1993という数が{1,9,9,3}という配列で表されているとき、これを1だけ増分して{1,9,9,4}という配列にしろ、といったものです。
他には{9,9,9,9}のときには{1,0,0,0,0}など。

拙いプログラミングで少しコードを書いてみたのですが、上手く動きません。
方針としては、配列の長さを求めて、配列の末尾から数字をチェックしていき、9であれば0にすることを繰り返し、9以外の数字が初めて出たところで
そこに1をプラスする。もし、配列の先頭までたどり着いた場合は、配列の長さを1だけ増やして、末尾に0を加える。

このような具合でコードを書こうと考えていたのですが、
そもそも繰り上がりがないパターンでも上手く動きませんでした。
繰り上がりパターンは、ひとまず適当に書いておいて下のようなコード繰り上がり無しパターンを試したのですが
配列の要素が1つプラスされ、末尾に4が表示されてしまい(1994にしたいところが19934と表示される)
どうにも上手く動きません。

恐らくどこかで変なコードを書いているのだと思うのですがどなたか原因が分かる方がいらっしゃいましたら教えていただきたいです。よろしくお願いいたします。

コード:

#include <stdio.h>

int main(void)
{
	int i;
	int j=0;
	int length;
	int a[]={1,9,9,3};
	
	j=sizeof(a) / sizeof(a[0]); /* 配列の要素数*/
length=j;

	while(a[j-1]==9) /* 配列末尾から9の有無をチャックして繰り上がりパターンの計算*/
	{
		if(j=1){  /* 配列の要素が先頭まで全て9だった場合*/
			a[0]=1;
			a[length]=0;
			break;
		}
		else if(j>1){ /* 要素が9であれば、先頭へ行く過程で0へ変えていく。 */
	a[j-1]=0;}
	j--; 
	}



	if(j=1){  /* 配列の要素数が増える場合の表示用 */
		
	for(i=0;i <= length; i++)
	printf("%d",a[i]);}

	
else {  /* 配列の要素数はそのままの場合の表示用*/
		a[j-1]++; 
for (i = 0;i < length;i++) {
		printf("%d",a[i]);
	}
}
	return 0;
}
 

アバター
へにっくす
記事: 634
登録日時: 13年前
住所: 東京都

Re: 配列の要素の操作が上手く行きません。

#2

投稿記事 by へにっくす » 13年前

ざっとみましたが
とりあえずif文の条件文を直してみようか。

コード:

if(j=1) {// これだと代入文で常に真です。

コード:

if(j==1) {// これで等しいならば、という意味になる
あと、インデントをしっかりそろえてください。
written by へにっくす

新riyn

Re: 配列の要素の操作が上手く行きません。

#3

投稿記事 by 新riyn » 13年前

早速回答ありがとうございます。

すみません、すごく単純なミスでしたね・・・
夜中に作業するものではないですね

インデントも気をつけます。

後は自力でなんとか組み立ててみようと思いますが、どうしても上手く行かなければまたお世話になります。
ありがとうございました

新riyn

Re: 配列の要素の操作が上手く行きません。

#4

投稿記事 by 新riyn » 13年前

アドバイス通り少し弄って、見直してみたところ上手いきました!
へにっくすさんありがとうございました!

閉鎖

“C言語何でも質問掲示板” へ戻る