第二类:与数有关的经典算法

算法中有很多与数有关的经典算法,包括最大公约数,字符串与数的转化问题、素数问题等等,这些也都会在面试中出现,让我们一起来看看这些问题吧!

1.最大公约数

思路:一个简单的方法就是辗转相除法(欧几里得算法),就是用最大的数除以较小的数,结果的余数和被除数构成新的一对数,继续上面的除法,直到大数被小数整除(余数为0),得到的较小的数就是最大公约数。

例如:20 12
过程:<20%12> = 8 ; <12%8> = 4; <8%4>==0,result = 4;

代码如下,直接上码图:


2.字符串与整数之间的转化

字符串转化为整数的方法就是:

char c;
int a;
a = c - '0'
反过来则是

char a;
int c;
c = a +'0'
代码如下,直接上码图:



3.素数的求法

思路:用筛法,先把N个自然数按次序排列起来,对1来说不是素数,不合法,划去。对2来说是素数留下,然后把2后面所有能被2整除的数都划去。在计算2后面没有被划去的整数3,继续对2的操作。最后留下的就是素数。

代码如下,直接上码图:


4.字符串到实数的转化

代码如下,直接上码图:


5.将一个整数因式分解

思路一:对于一个整数n,注意因式是从小的开始的,求出一个小的因子f1后,此时应该在[f1,f2](f2 = n/f1)之间求二级因子。如此反复,直到最后因子在[fn-1,fn]之间找不到整除的因子为止。

代码如下,直接上码图:


6.不用比较运算符,求两个数的最大值

用宏定义   #define MAX(a,b) a>b?a:b 则用到了比较运算符
不用比较运算符可以利用a 与b的差的绝对值的性质来解决
                     #define MAX(a,b) (a+b+abs(a-b))/2

7.将一个整数分解成为两个数的和

在[1,n/2]范围内找到i 和n-i就行


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值