算法——数学运算问题
练习
琉璃色的星辉
这个作者很懒,什么都没留下…
展开
-
C/C++ 高精度整数模板
const int MAXN = 10000;struct BigInteger { int digit[MAXN]; int length; BigInteger(); BigInteger(int x); BigInteger(string str); BigInteger(const BigInteger& b); BigInteger operator=(int x); BigInteger operator=(string str); BigInteger oper原创 2021-04-11 17:12:12 · 137 阅读 · 0 评论 -
c++求两个数最大公约数
最大公约数(GCD)欧几里得算法,把求a,b的最大公约数转换为求b,a%b的最大公约数问题,不断重复该过程,直到缩小成求某个非零数与零的最大公约数,则该非零数即为所求。例子:PTA基础编程题目集 7-24 约分最简分式#include <iostream>using namespace std;int gcd(int a, int b) { if (b == 0) return a; else { return gcd(b, a % b); }}int main()原创 2021-02-11 12:08:56 · 380 阅读 · 0 评论 -
【转载】排列组合公式原理
绪论:加法原理、乘法原理#分类计数原理:做一件事,有n类办法,在第1类办法中有m1种不同的方法,在第2类办法中有m2种不同的方法,…,在第n类办法中有mn种不同的方法,那么完成这件事共有N=m1+m2+…+mn种不同的方法。分步计数原理:完成一件事,需要分成n个步骤,做第1步有m1种不同的方法,做第2步有m2种不同的方法,…,做第n步有mn种不同的方法,那么完成这件事共有N=m1×m2×⋯×mn种不同的方法。区别:分类计数原理是加法原理,不同的类加起来就是我要得到的总数;分步计数原理是乘法原理,是同一转载 2021-01-29 13:49:10 · 8908 阅读 · 0 评论 -
筛选一定范围内素数 c/c++模板
代码如下#define MAX 10000int prime[MAX]; //保存筛得的素数int primeSize; //保存素数的个数bool mark[MAX + 1]; //若mark[x]为true,则表示该数x已被标记成非素数void init() { for (int i = 0; i <= MAX; i++) { //初始化,所有数字都没被标记 mark[i] = false; } primeSize = 0; //得到素数个数原创 2021-01-25 12:22:55 · 145 阅读 · 0 评论 -
二分求幂 A的B次方
一、方法将a的b次转换为若干个a的2^k次的积,并尽可能减少分解结果的个数,即求b的二进制数,再对对应为1的位进行累乘得到结果。因为求幂结果可能很大,所以要根据情况调整结果的类型。二、代码 int a, b; int ans = 1; //保存最终结果,初值为1 cin >> a >> b; while (b != 0) { //b不为0,即对b转换二进制未结束 if (b % 2 == 1) { //当前位为1,需要累成a的2^k次至ans,2^k为当前位权重原创 2021-01-26 11:40:37 · 176 阅读 · 0 评论 -
PTA基础编程题目集 6-10计算大数阶乘
贴个代码以便查找void Print_Factorial(const int N) { int result[3000]; int cheng_shu = 0; int jin_wei = 0; int wei_shu = 1; int lin_shi_jie_guo = 0; for (int i = 0; i < 1000; i++) { result[i] = 0; } result[0] = 1; for (int i = 2; i <= N;原创 2021-01-23 21:42:45 · 134 阅读 · 0 评论