C#程序設計(十)----(一個用移位和加法運算取代整數相乘的方法)

* 程序的版權和版本聲明部分
* 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);

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章