常用基础算法C++实现

2016年10月06日10:40:43

本文记录一些常用的基础算法,只为熟能生巧,内容多的话会建立索引的

素数(质数)判断

素数的定义:就是除它本身和1之外,没有其他任何约数的数

1 bool isPrime(int i)
2 {
3     for (int j = 2; j <= sqrt(i * 1.0); j++) {
4         if (i % j == 0)
5             return false;
6     }
7     return true;
8 }

最大公约数

例如:求24和60的最大公约数,先分解质因数,得24=2×2×2×3,60=2×2×3×5,24与60的全部公有的质因数是2、2、3,它们的积是2×2×3=12,所以,(24,60)=12

 1 int gcd(int a, int b) // greatest common divisor
 2 {
 3      return (!b)?x:gdc(y,x%y);
 4 }
 5
 6 //或者更容易理解的
 7 int gcd(int a, int b) // greatest common divisor
 8 {
 9     while(a%b){
10         int tmp = a;
11         a = b;
12         b = tmp%b;
13     }
14     return b;
15 }

有了最大公约数,最小公倍数就很好求了,表示为 a*b / 最大公约数

大数相乘

大数的读入和输出都不同于正常数,读入是一字符串的方式读入的,相乘后的数存入到数组中,然后遍历数组输出数据。

下面看一下数相乘的原理

a = 34 b = 25

a和b相乘过程展示

b      2                 5

       a    3                 4

----------------------------------------相乘过程,和我们认知中的乘法一样,只是没有进位

8(2X4)         20(4X5)

6(2X3)       15(3X5)

---------------------------------------------------------正常的乘法相加,依旧不进位

6                 23                 20

---------------------------------------------------------通过进位是不是就能得到我们熟悉的答案了  850

8                  5                    0

(6+2(进位))  (3+2(进位))                进位的解释

通过上面的分析,我们知道了算法的核心思想,接下来就能把算法实现,实现方法如下:

 1 void multiply(const char* a, const char* b){
 2      assert(a != NULL && b != NULL!);
 3      int i, j ,la, lb;
 4      la = strlen(a);
 5      lb = strlen(b);
 6      int s[la+lb] = {0};
 7      for(i = 0; i < la; i++){ //完成相乘,但是没有进位
 8          for(j = 0; j < lb; j++){
 9              s[i+j] += (a[i] - ‘0‘)*(b[j]-‘0‘);
10          }
11      }
12      for(i = 0; i < la+lb; i++){ //完成进位
13          s[i+1] += s[i]/10;
14          s[i] = s[i]%10;
15      }
16      for(i = la+lb; i >= 0; i-- ){
17          if(s[i] != 0) cout << s[i];
18      }
19 }    
时间: 2024-10-31 22:01:31

常用基础算法C++实现的相关文章

今天给大家分享一下js中常用的基础算法,废话不多说,直接上代码

今天给大家分享一下js中常用的基础算法,废话不多说,直接上代码: 1.两个数字调换顺序 var a = 2,b=4 function fun(a,b){ b = b - a ;// a = 2 ; b = 2 a = a + b // a = 4 ; b = 2; b = a - b;// a = 4 ; b = 2 return [a,b] } fun(a,b) // a = 4 ;b = 2 2.对象排序,安装对象中的id排序对象的位置: var arr = [ { nama: 'a', i

常用MD5算法代码

常用的MD5算法代码日期: 2014年8月4日作者: 铁锚 MD5,全称为 Message Digest Algorithm 5(消息摘要算法第五版).详情请参考 维基百科:MD5 MD5加密后是一个字节数组, 但我们一般是取其十六进制的字符串表示法,当然,十六进制数字符串是区分大小写,在 mysql数据库,Java,和JavaScript语言中,一般是使用小写的字符串来表示, 而在 Oracle数据库官方提供的包中,返回的是大写字符串,这算是一个坑,如果你想要执行多次 md5,可能需要转换为小

javascript常用排序算法实现

毕业后,由于工作中很少需要自已去写一些排序,所以那些排序算法都忘得差不多了,不过排序是最基础的算法,还是不能落下啦,于是找了一些资料,然后用Javascript实现了一些常用的算法,具体代码如下: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>

javascript常用经典算法实例详解

javascript常用经典算法实例详解 这篇文章主要介绍了javascript常用算法,结合实例形式较为详细的分析总结了JavaScript中常见的各种排序算法以及堆.栈.链表等数据结构的相关实现与使用技巧,需要的朋友可以参考下 本文实例讲述了javascript常用算法.分享给大家供大家参考,具体如下: 入门级算法-线性查找-时间复杂度O(n)--相当于算法界中的HelloWorld ? 1 2 3 4 5 6 7 8 9 10 //线性搜索(入门HelloWorld) //A为数组,x为要

常用排序算法的python实现和性能分析

http://www.cnblogs.com/wiki-royzhang/p/3614694.html 一年一度的换工作高峰又到了,HR大概每天都塞几份简历过来,基本上一天安排两个面试的话,当天就只能加班干活了.趁着面试别人的机会,自己也把一些基础算法和一些面试题整了一下,可以阶段性的留下些脚印——没办法,平时太忙,基本上没有时间写博客.面试测试开发的话,这些也许能帮得上一些. 这篇是关于排序的,把常见的排序算法和面试中经常提到的一些问题整理了一下.这里面大概有3个需要提到的问题: 虽然专业是数

CUDA系列学习(五)GPU基础算法: Reduce, Scan, Histogram

喵~不知不觉到了CUDA系列学习第五讲,前几讲中我们主要介绍了基础GPU中的软硬件结构,内存管理,task类型等:这一讲中我们将介绍3个基础的GPU算法:reduce,scan,histogram,它们在并行算法中非常常用,我们在本文中分别就其功能用处,串行与并行实现进行阐述. 1. Task complexity task complexity包括step complexity(可以并行成几个操作) & work complexity(总共有多少个工作要做). e.g. 下面的tree-str

c/c++面试总结---c语言基础算法总结2

算法是程序设计的灵魂,好的程序一定是根据合适的算法编程完成的.所有面试过程中重点在考察应聘者基础算法的掌握程度. 上一篇讲解了5中基础的算法,需要在面试之前熟练掌握,本篇讨论剩余的基础算法. 先看一个面试题目:设计一个函数,求一个给定字符串中所有数字的和. 例如:给定字符串 “abc12fas123dfaf34”, 计算结果为:12 + 123 + 34 = 169 其中包括了:求和方法.字符串遍历方法.数字字符转成数字的方法 多位数字组合成整数的方法 必须熟练掌握以上四种基础算法,才能解决该问

常用排序算法及其实现

一.常用排序算法及滑稽实现 1. 插入排序:遍历数组(n),将每个元素插入到前面子序列的合适位置(插入时采取前面的部分元素后移,再将本元素填在适当位置的方法) 平均:O(n2) 最坏:O(n2) 最好:O(n)(有序时出现) 稳定性:稳定(相同元素在排序之后相对位置不会改变) 模拟: 12 30 9 100 1 3 10 12 30 9 100 1 3 10 9 12  30 100 1 3 10 9 12 30 100 1 3 10 1 9 12 30 100 3 10 1 3 9 12  3

常用的算法思想总结

对于计算机科学而言,算法是一个非常重要的概念.它是程序设计的灵魂,是将实际问题同解决该问题的计算机程序建立起联系的桥梁.接下来,我们来看看一些常用的算法思想. (一)穷举法思想 穷举法,又称为强力法.它是一种最为直接,实现最为简单,同时又最为耗时的一种解决实际问题的算法思想. 基本思想:在可能的解空间中穷举出每一种可能的解,并对每一个可能解进行判断,从中得到问题的答案. 使用穷举法思想解决实际问题,最关键的步骤是划定问题的解空间,并在该解空间中一一枚举每一个可能的解.这里有两点需要注意,一是解空