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);

 

 

 

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