如何高效求2个整数的乘积。

利用减治法的思想来实现,
将2个整数相乘只需要进行简单的加法和位运算。
实现如下:

 1 using  System;
 2 using  System.Collections.Generic;
 3 using  System.Text;
 4
 5 namespace  ConsoleApplication43
 6 {
 7    class Program
 8    {
 9        static void Main(string[] args)
10        {
11            ESCF e = new ESCF();
12
13            int s = e.GetResult(1010);
14
15            System.Console.WriteLine(s);
16
17            s = e.GetResult(1043-1022);
18
19            System.Console.WriteLine(s);
20        }

21    }

22
23    /**//// <summary>
24    /// 判断一个整数是奇数还是偶数。
25    /// </summary>

26    class OddEven
27    {
28        static private int _s = 1;
29
30        static public bool IsEven(int a)
31        {
32            return ((a & _s) == 0);   
33        }

34
35        static public bool IsOdd(int a)
36        {
37            return !IsEven(a);
38        }

39    }

40
41    class ESCF
42    {
43        private int _small;
44        private int _big;
45
46        private bool _minus;
47
48        private void init(int a, int b)
49        {
50            int f = 0;
51
52            if (a < 0) f++;
53            if (b < 0) f++;
54
55            if (f == 0 || f == 2) _minus = false;
56            else _minus = true;
57            
58            a = Math.Abs(a);
59            b = Math.Abs(b);
60
61            _small = a <= b ? a : b;
62            _big = a > b ? a : b;   
63        }

64
65        public int GetResult(int a, int b)
66        {
67            init(a, b);
68
69            int reslut = 0;
70
71            while (_small != 1)
72            {
73                if (OddEven.IsEven(_small))
74                {
75                    _small >>= 1;
76                    _big <<= 1;
77                }

78                else
79                {
80                    _small--;
81                    reslut += _big;
82
83                    _small >>= 1;
84                    _big <<= 1;
85                }

86            }

87
88            reslut += _big;
89
90            if (_minus)
91                reslut = -reslut;
92
93            return reslut;
94        }

95    }

96}

97


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值