問題は、例えば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;
}