心动C++ 情牵基础算法 II
2013-11-29 23:01
351 查看
/*--------------------------------------------------------------------------- * Project: NB.cpp * Name: zwp * Date: 2013.11 *---------------------------------------------------------------------*/ #include <iostream> #define SIZE 10 int number1[SIZE] = { 0 }; int number2[SIZE] = { 0 }; int number[SIZE] = { 0 }; /* ** N 的B进制表示 */ void base(int* num, int n, int b) { int q = n; int k = 0; while(q != 0) { num[k] = q % b; // 余数 q = q / b; // 商 k = k + 1; } } /* ** 整数相加 */ void add(int* s, int* a, int* b) { int c = 0; int d = 0; for(int indeu = 0; indeu < SIZE-1; ++ indeu) { d = (a[indeu] + b[indeu] + c)/2; s[indeu] = a[indeu] + b[indeu] + c - 2*d; c = d; } s[SIZE-1] = c; } int mul(int* s, int a, int* b) { int p = 0; for(int indeu = 0; indeu < SIZE-1; ++ indeu) { if(b[indeu]) s[indeu] = (a <<indeu); else s[indeu] = 0; } for(int index = 0; index < SIZE - 1; ++ index) p += s[index]; return p; } /* ** 计算商和余数 */ typedef struct { int q; int r; }N; N* division(int a, int d) { N n; n.q = 0; n.r = fabs((double)a); // 取绝对值 while(n.r >= d) // 直到余数小于商 { n.r -= d; n.q += 1; } if(a < 0 && n.r > 0) { n.r = d - n.r; n.q = -(n.q + 1); } return &n; } void display(int* number, int size) { for(int index = size-1; index >= 0; -- index) std::cout <<number[index]<<" "; std::cout << std::endl; } /* ** 同余冥 */ int modular(int b, int* a, int m) { int x = 1; int power = b % m; for(int index = 0; index < SIZE-1; ++ index) { if(a[index]) x = (x * power) % m; power = (power*power) % m; } return x; // b^a % m } /* ** 欧几里得算法 */ int gcd(int a, int b) { int x = a; int y = b; int r = 0; while(y) { r = x % y; // 余数 x = y; y = r; } return x; } /* ** Chinese mode */ typedef struct { int s; // 除数 int m; // 余数 int M; }S; int chinesemode(S* s, int size) { int m = 1 ; int x = 0 ; for(int index = 0; index < size; ++ index) m *= s[index].s; for(int index = 0; index < size; ++ index) s[index].M = m / s[index].s; for(int index = 0; index < size; ++ index) x += s[index].m * s[index].M * (s[index].M % s[index].s); return x%m; } void main(int argc, char* argv[]) { base(number1, 16, 2); display(number1, SIZE); base(number2, 10, 2); display(number2, SIZE); std::cout <<mul(number, 16, number2)<<std::endl; std::cout <<division(13, 2)->q<<" "<<division(13, 2)->r<<std::endl; base(number, 3, 2); std::cout <<modular(3, number, 3)<<std::endl; //3^number%2 std::cout <<gcd(14, 7)<<std::endl; S s[3] = { {3, 2, 0}, {5, 3, 0}, {7, 2, 0} }; std::cout <<chinesemode(s, 3)<<std::endl; //add(number, number1, number2); // number = number1 + number2 //display(number, SIZE); system("pause"); }
相关文章推荐
- 心动C++ 情牵基础算法 I
- 心动C++ 情牵基础算法III
- 心动C++ 情牵基础算法VI
- C++——算法基础之排序——希尔排序(已修改)
- C++基础语法知识点归纳II
- C++语法基础--泛型算法(generic algorithm)--replace_copy(),unique_copy,copy()
- C++语法基础--泛型算法(generic algorithm)--iostream迭代器
- [置顶] 信息学奥赛一本通(C++版) 第二部分 基础算法 第五章 搜索与回溯算法
- [置顶] 信息学奥赛一本通(C++版) 第二部分 基础算法 第六章 贪心算法
- C++:泛型算法基础
- c++基础8:常用的数据结构及算法
- [置顶] 信息学奥赛一本通(C++版) 第二部分 基础算法 第七章 分治算法
- 十大基础应用算法及C++实现(一)----快速排序算法
- c++基础知识,有现成的函数不用,非的自己设计算法,这不是坑爹吗?
- 算法与数据结构基础4:C++二叉树实现及遍历方法大全
- 算法导论-第22章-基本的图算法:强连通分量(深度优先遍历基础上)C++实现
- C++ 基础算法之二分查找
- 算法与数据结构基础 -- 排序 (C++实现)
- c++基础知识,有现成的函数不用,非的自己设计算法,这不是坑爹吗?
- STL + c++ + 模板 + 重要思维 + 基础算法+ 经典算法 + 经典实例 + 编程总结+ 心得+ 入门必会 + 知识点汇总。+string +dfs +bfs等重要算法