Пример #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>
 /// 実際に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);
     }
 }
Пример #3
0
        /// <summary>
        /// 答えをチェックする
        /// </summary>
        /// <returns>答えが正しいときtrue</returns>
        private bool check_answer()
        {
            LongInteger ans = number1.multiply(number2);

            for (int i = 0; i < cur_cols; i++)
            {
                if (digit[cur_rows - 1, i].getNumber() != ans[i])
                {
                    return(false);
                }
            }
            return(true);
        }
Пример #4
0
 public MultexMultiplication(System.Windows.Forms.Panel panel, System.Windows.Forms.Label label, KeyboardSettings key, ViewSettings view)
 {
     panelCalc   = panel;
     labelAnswer = label;
     //back_color = System.Drawing.Color.FromArgb(255, 245, 245); // パネルの背景の色
     ran = new Random();
     // キーボードの設定
     key_settings = key;
     // 表示の設定
     view_settings = view;
     number1       = new LongInteger(max_size);
     number2       = new LongInteger(max_size);
     single_mode   = false;
     change_stage(Stage.Input1, true);
 }
Пример #5
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);
        }
Пример #6
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);
 }
Пример #7
0
        /// <summary>
        /// 答えを取得する
        /// </summary>
        /// <returns>答えの文字列</returns>
        private string get_answer()
        {
            LongInteger ans = number1.multiply(number2);

            return(ans.get_string());
        }