swap VS gcd的多种实现方式
2013-06-15 05:02
330 查看
swap很常见,这里总结可以实现swap功能的方式:
提倡用第一种办法(STL库采用该方法),异或或加减并没有减少时间,相反,异或会增加运算量,不具有实用性.
gcd很常见,这里总结可以实现gcd功能的方式:常见的有欧几里德算法,递归式和迭代式,减法实现和除法取模实现。
提倡用第一种办法(STL库采用该方法),异或或加减并没有减少时间,相反,异或会增加运算量,不具有实用性.
#include<iostream> #include<stack> using namespace std; void swap_normal(int& a,int& b) { int temp=a; a=b; b=temp; } void swap_stack(int& a,int& b) { stack<int> st; st.push(a); st.push(b); a=st.top(); st.pop(); b=st.top(); st.pop(); } void swap_add(int& a,int& b) { a=a+b; b=a-b; a=a-b; } void swap_mul(int& a,int& b) { a=a*b; b=a/b; a=a/b; } void swap_xor(int& a,int& b) { if(a != b) { a^=b; b^=a; a^=b; } } int main() { int a,b; while(1) { cin>>a>>b; swap_stack(a,b); cout<<a<<" "<<b<<endl; } return 0; }
gcd很常见,这里总结可以实现gcd功能的方式:常见的有欧几里德算法,递归式和迭代式,减法实现和除法取模实现。
#include<iostream> using namespace std; int gcd1(int m,int n) { if(n == 0) return m; else return gcd1(n, m % n); } int gcd2(int m,int n) { int r; do { r=m % n; m=n; n=r; }while(r); return m; } int gcd3(int m, int n) { while (m != 0 && n != 0) { if (n >= m) n -= m; else m -= n; } if( m==0 ) return n; else return m; } int gcd4(int m, int n) { int t; while (m != 0) { if (n >= m) n -= m; else { t = m; m = n; n = t;//swap(m,n) } } return n; } void main() { cout<<gcd1(12,8)<<endl; cout<<gcd2(12,8)<<endl; cout<<gcd3(12,8)<<endl; cout<<gcd4(12,8)<<endl; }
相关文章推荐
- 多种方式实现Android定时任务
- GCD下的几种实现同步的方式
- Spring学习总结——Spring实现IoC的多种方式
- 多种方式实现文件下载功能
- Spring实现AOP的多种方式
- java只要一句代码,实现多种方式解决图片压缩、旋转,裁切,加水印的问题
- C#高性能TCP服务的多种实现方式
- 单例模式的多种实现方式
- Android多种方式实现自定义Dialog对话框
- 多种jQuery绑定事件的实现方式
- 实现锁的多种方式和锁的高级用法
- 递归经典案例,三角数字的多种实现方式
- 多种方式实现底部菜单栏(仿微信界面)
- 多渠道打包的多种方式实现(炒鸡简单)
- 生产者/消费者问题的多种Java实现方式
- Spring实现IoC的多种方式小结
- iOS 定时器 NSTimer、CADisplayLink、GCD3种方式的实现
- 斐波那契数列多种实现方式
- Android多种方式实现自定义Dialog对话框
- Spring学习总结——Spring实现AOP的多种方式