C#プログラミング(十)---(整数乗算の代わりにシフトと加算を用いる方法)

2026 ワード

*プログラムの著作権とバージョン宣言部分*Copyright(c)2012、煙台大学コンピュータ学院学生*All rights reserved.
*作者:劉鎮*完成日:2012年10月19日*バージョン番号:3.010
*タスクおよび解法の説明
*問題の説明:整数乗算の代わりにシフトと加算演算を使用する方法
 
*コードセクション:
 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace shiftAdd
{
    class Add
    {
        public int[] mark = new int[20];
        public int num = 0;
        public int m;

        public Add()
        {
            for (int i = 0; i < 20; i++)
            {
                mark[i] = 0;
            }
        }

        public void add()
        {
            for (int i = 0; m >= 2; i++)
            {
                mark[i] = m % 2;
                num++;
                m = m / 2;
            }

            mark[num] = 1;
            num++;
        }

        public int shiftAdd(int n)
        {
            int all = 0;
            this.add();

            for (int i = 0; i < num; i++)
            {
                int save = 1;

                if (mark[i] == 1)
                {
                    save <<= i;
                    all += save;
                }
            }

            return n * all;
        }

    }
    class Program
    {
        static void Main(string[] args)
        {
            Add add = new Add();
            add.m = 20;
            Console.WriteLine(add.shiftAdd(5));

            Console.ReadKey(true);
        }
    }
}

 
 
心得:
 
ははは、できた、もとはこのようにすることができます.やっとこの方法を思いついた.
 
例:
        num *= 32; num<<=5;/*に等しい2の5乗は32*/
乗数が2のn次方でない場合、乗数をいくつかの2のn次方の和に分解することができます:num*=20;num*=(16+4)に等しい.