Пример #1
0
 /// <summary>
 /// 数字に変更されたときは、途中の数字がないところも、数字にして、数を更新する
 /// </summary>
 /// <param name="row">掛ける数のインデックス</param>
 /// <param name="col">桁</param>
 /// <param name="number">掛ける数</param>
 private void input_number(int row, int col, ref LongInteger number)
 {
     // 数字に変更されたときは、途中の数字がないところも、数字にする
     if (digit[row, col].getNumber() != -1)
     {
         for (int i = 0; i < col; i++)
         {
             if (digit[row, i].getNumber() == -1)
             {
                 digit[row, i].setNumber(0);
             }
         }
     }
     // 数を更新する
     number.clear();
     for (int i = cur_size_1 - 1; i >= 0; i--)
     {
         if (digit[row, i].getNumber() == -1)
         {
             number.shift_left_and_add(0);
         }
         else
         {
             number.shift_left_and_add(digit[row, i].getNumber());
         }
     }
 }
Пример #2
0
        /// <summary>
        /// 数を書き込む
        /// </summary>
        /// <param name="n">0〜9の数</param>
        private void set_number(int n)
        {
            switch (cur_stage)
            {
            case Stage.Input1:
                // 1個めの数を入力する段階
                number1.shift_left_and_add(n);
                if (number1.get_length() > cur_size_1 && number1.get_length() < max_size)
                {
                    // 入力領域のサイズを変更して、数をセットする
                    set_long_numbers(number1, number2);
                }
                else
                {
                    replace_one_number(0, cur_size_1, number1);
                }
                show_selection();
                break;

            case Stage.Input2:
                // 2個めの数を入力する段階
                number2.shift_left_and_add(n);
                if (number2.get_length() > cur_size_2 && number2.get_length() < max_size)
                {
                    // 入力領域のサイズを変更して、数をセットする
                    set_long_numbers(number1, number2);
                }
                else
                {
                    replace_one_number(1, cur_size_2, number2);
                }
                show_selection();
                break;

            case Stage.Mult:
                // 掛け算をやっている段階のとき(前半)
                // 中間領域に書き込む
                if (single_mode)
                {
                    if (at_highest)
                    {
                        digit[2 + calc_pos_2, calc_pos_1 + calc_pos_2 + 1].setNumber(n);
                    }
                    else
                    {
                        digit[2 + calc_pos_2, calc_pos_1 + calc_pos_2].setNumber(n);
                    }
                }
                else
                {
                    if (at_high_digit)
                    {
                        digit[2 + calc_pos_2, calc_pos_1 + calc_pos_2 + 1].setNumber(n);
                    }
                    else
                    {
                        digit[2 + calc_pos_2, calc_pos_1 + calc_pos_2].setNumber(n);
                    }
                }
                move_higher();
                break;

            case Stage.Add:
                // 足し算をやっている段階のとき(後半)
                // 結果の領域に書き込む
                if (single_mode)
                {
                    digit[cur_rows - 1, add_calc_pos].setNumber(n);
                }
                else
                {
                    if (at_high_digit)
                    {
                        digit[cur_rows - 1, add_calc_pos + 1].setNumber(n);
                    }
                    else
                    {
                        digit[cur_rows - 1, add_calc_pos].setNumber(n);
                    }
                }
                move_higher();
                break;
            }
        }