Пример #1
0
 /// <summary>
 /// 実際に1行の数を書き換える
 /// </summary>
 /// <param name="row">書き換える行</param>
 /// <param name="size">書き換える行の桁数</param>
 /// <param name="number">書き込む数</param>
 private void replace_one_number(int row, int size, LongInteger number)
 {
     for (int i = 0; i < number.get_length() && i < size; i++)
     {
         digit[row, i].setNumber(number[i]);
     }
     for (int i = number.get_length(); i < size; i++)
     {
         digit[row, i].setNumber(-1);
     }
 }
Пример #2
0
        /// <summary>
        /// 掛け算を行う
        /// </summary>
        /// <param name="n">掛ける数</param>
        /// <returns>積</returns>
        public LongInteger multiply(LongInteger n)
        {
            LongInteger res = new LongInteger(get_length() + n.get_length());

            for (int i = 0; i < get_length(); i++)
            {
                for (int j = 0; j < n.get_length(); j++)
                {
                    int m = this[i] * n[j];
                    res.add(m % 10, i + j);
                    res.add(m / 10, i + j + 1);
                }
            }
            return(res);
        }
Пример #3
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;
            }
        }
Пример #4
0
 /// <summary>
 /// 数をセットする
 /// </summary>
 /// <param name="n1">1個めの数</param>
 /// <param name="n2">2個めの数</param>
 private void set_long_numbers(LongInteger n1, LongInteger n2)
 {
     create_panels(n1.get_length(), n2.get_length());
     replace_one_number(0, cur_size_1, n1);
     replace_one_number(1, cur_size_2, n2);
 }