百度首页 | 百度空间
 
查看文章
 
(ZT)C语言用加法代替乘法
2007-11-02 00:14
乘法可以用加法代替的。

下面这段代码计算a*b,将结果保存到ret中(这里假设a,b,ret都是int类型,且a和b都是非负数)。
     ret = 0;
     (a & (1<<0))?(ret += (b<<0)):(0);
     (a & (1<<1))?(ret += (b<<1)):(0);
     (a & (1<<2))?(ret += (b<<2)):(0);
     (a & (1<<3))?(ret += (b<<3)):(0);
     (a & (1<<4))?(ret += (b<<4)):(0);
     (a & (1<<5))?(ret += (b<<5)):(0);
     (a & (1<<6))?(ret += (b<<6)):(0);
     /* 继续往后写…… */


如果int只有8位,则这里足够了。
如果int是16位,则一直要写到1<<14。
如果int是32位,则一直要写到1<<30。
如果int是64位,则一直要写到1<<62。
如此重复的代码,简直就是灾难。不过,能完成任务那也是不错的~

至于除以2,可以用移位运算来代替。

这样一来就可以用n*(n-1)/2来计算了。

-----------------------------------------------------------转贴结束---------------------------------------------------------

算法理解:挺好玩的算法,原理是把一个数用集合M {x| x是2的自然数次方}中的数表示


类别:你知道我知道 | 添加到搜藏 | 浏览() | 评论 (1)
 
最近读者:
 
网友评论:
1
2008-04-05 20:09
获得int长度可以用sizeof(int) * 8
 
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码:
 

     

©2008 Baidu