/// <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()); } } }
/// <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; } }