2倍すると最後尾の数字が先頭に

ある長い数列があり、2倍すると最後尾の数字(8)が先頭に移動します。
元の数列を求めて表示して下さい。ArrayList を使った応用問題です。

前田稔の超初心者のプログラム入門

問題の説明

  1. 元の数列(桁数は不明)
    ・・・・・・・・・8

    2倍すると
    8・・・・・・・・・
  2. 元の数列を2倍すると、最下位の桁が8なので積の最下位桁は6になることが解かるでしょう。
    ・・・・・・・・・8
          ×2
    8・・・・・・・・6
  3. 積の最下位桁が6と言う事は、8の隣が6になります。
    ・・・・・・・・68
  4. ・・・68を2倍すると、6の隣は3なります。
    この考え方を繰り返して行くと、やがて答えが求まります。
    ・・・・・・・・68
          ×2
    8・・・・・・・36

プログラムの作成

  1. この問題では「答えが何桁になるか不明」で下位から一桁ずつ求まります。
    また求めた答えは、求めた順とは逆に(先頭から)表示しなければなりません。
    このようなときには ArrayList を使うのが便利です。
  2. メモ帳などでタイプして ListSuretu.java の名前で保存して下さい。
    // ArrayList(List) で数列を求める    前田 稔
    import java.util.*;
    class  ListSuretu
    {   public static void main(String[] args)
        {   List    list = new ArrayList();
            int     n,s,c;
            n= 8;
            s=c= 0;
            while(s!=8)
            {   list.add(n);
                s= n*2+c;
                n= s%10;
                c= s/10;
            }
            for(n=list.size()-1; n>=0; n--)
                System.out.print(list.get(n));
        }
    }
    
  3. java のソースファイルをコンパイルして class オブジェクトを実行して下さい。

プログラムの説明

  1. ArrayList を使うときは java.util.* をインポートして下さい。
    ArrayList list = new ArrayList(); でインスタンス化します。
    このとき配列と違ってサイズを指定する必要はありません。
        import java.util.*;
        class  ListSuretu
        {   public static void main(String[] args)
            {   ArrayList  list = new ArrayList();
        
  2. プログラムのロジックは各自で考えて下さい。

【演習】

このプログラムでは2倍していますが、3倍,4倍,・・・,8倍でも同じように答えを求めることが出来ます。
倍数によって数列の長さが大きく変わるので注意して下さい。
それでは「3倍〜8倍」の場合の答えを求めて下さい。
数列が最も長くなるのは何倍のときで、何桁になるでしょう?。

超初心者のプログラム入門(Java2)