<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[lvonge的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/lvonge</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; lvonge]]></copyright><item><title><![CDATA[大整数相加与相减]]></title><link>https://blog.youkuaiyun.com/lvonge/article/details/106463703</link><guid>https://blog.youkuaiyun.com/lvonge/article/details/106463703</guid><author>lvonge</author><pubDate>Sun, 31 May 2020 23:30:06 +0800</pubDate><description><![CDATA[两个大整数相加或相减的问题是很经典的问题。
先输入两个大整数，用string保存，然后转换成自定义的大整数的值。
最后先输出两个数的相加的值，再输出两个数的相减的值。
#include &lt;iostream&gt;
#include &lt;algorithm&gt;
#include &lt;cstdio&gt;
#include &lt;string&gt;
using namespace std;
typedef struct bignum{
    int d[1000];
    int le]]></description><category></category></item><item><title><![CDATA[基于C++的string方法来解决大数相加问题]]></title><link>https://blog.youkuaiyun.com/lvonge/article/details/106458694</link><guid>https://blog.youkuaiyun.com/lvonge/article/details/106458694</guid><author>lvonge</author><pubDate>Sun, 31 May 2020 18:03:43 +0800</pubDate><description><![CDATA[大数相加问题一直是一个很经典的算法问题。给定两个非常非常大，大到超越了不可能用int，long long int等类型表示的数字，所以就要用其他的方法。
我的解决方案是使用两个string来保存数字，然后再模拟两个数字相加的情况。最后再输出。
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;algorithm&gt;
using namespace std;
int main(){
    string a,b,c="";
   ]]></description><category></category></item><item><title><![CDATA[筛法求素数]]></title><link>https://blog.youkuaiyun.com/lvonge/article/details/106457523</link><guid>https://blog.youkuaiyun.com/lvonge/article/details/106457523</guid><author>lvonge</author><pubDate>Sun, 31 May 2020 16:49:51 +0800</pubDate><description><![CDATA[实际上，除了对每一个素数进行单点判定的方法外，筛法也可以快速的求出大规模的素数。
例如 2是素数，那么所有以2为倍数的数字（例如4 6 8 10 12等等）肯定都不是素数了。
那么我们需要做的就是从2开始筛选，直到筛选出题目要求的所有的素数即可。
先输入两个数字M和N（M &lt; N），然后就输出M和N之间的所有的素数。
#include &lt;iostream&gt;
using namespace std;
const int maxn = 110;
bool prime[maxn] = {fals]]></description><category></category></item><item><title><![CDATA[基于单点判定的方法来判定素数]]></title><link>https://blog.youkuaiyun.com/lvonge/article/details/106457099</link><guid>https://blog.youkuaiyun.com/lvonge/article/details/106457099</guid><author>lvonge</author><pubDate>Sun, 31 May 2020 16:30:22 +0800</pubDate><description><![CDATA[素数指的就是，该数不可以被除了该数本身和1其他的数整除。
本方法对每一个数都进行了判定。
先输入数字N，然后再数入N个数字，每次输入一个数字，都判定该数字是不是素数。如果是素数，就输出YES，否则输出NO。
#include &lt;iostream&gt;
#include &lt;cmath&gt;
using namespace std;
bool is_prime(int n){
    if(n &lt;= 1) return false;
    int sqr = (int)sqrt(n*1.]]></description><category></category></item><item><title><![CDATA[基于辗转相除法求最小公倍数]]></title><link>https://blog.youkuaiyun.com/lvonge/article/details/106456708</link><guid>https://blog.youkuaiyun.com/lvonge/article/details/106456708</guid><author>lvonge</author><pubDate>Sun, 31 May 2020 16:07:23 +0800</pubDate><description><![CDATA[先输入m和n，则先求出m和n的最大公约数，再令m和n的乘积除以最大公约数，所得即为最小公倍数。
#include &lt;iostream&gt;
#include &lt;algorithm&gt;
using namespace std;
int gcd(int a,int b){
    if(b == 0) return a;
    else return gcd(b,a % b);
}
int main(){
    int m,n;
    cin &gt;&gt; m &gt;&gt; n;]]></description><category></category></item><item><title><![CDATA[辗转相除法实现求两个数的最大公约数]]></title><link>https://blog.youkuaiyun.com/lvonge/article/details/106456607</link><guid>https://blog.youkuaiyun.com/lvonge/article/details/106456607</guid><author>lvonge</author><pubDate>Sun, 31 May 2020 16:01:33 +0800</pubDate><description><![CDATA[使用辗转相除法来实现求两个数的最大公约数。
只需要先输入两个数字，然后就能输出这两个数字的最大公约数。
#include &lt;iostream&gt;
#include &lt;algorithm&gt;
using namespace std;
int gcd(int a,int b){
    if(b == 0) return a;
    else return gcd(b,a % b);
}
int main(){
    int m,n;
    cin &gt;&gt; m &gt;&gt]]></description><category></category></item><item><title><![CDATA[快速排序]]></title><link>https://blog.youkuaiyun.com/lvonge/article/details/106455323</link><guid>https://blog.youkuaiyun.com/lvonge/article/details/106455323</guid><author>lvonge</author><pubDate>Sun, 31 May 2020 14:42:49 +0800</pubDate><description><![CDATA[快速排序的作用是，先将对一个区间的数据进行排序。使目前区间中某一个数的右边的所有数字全都比它小，左边的所有数字全都比它大。之后再对左边和右边两个区间实行这样的操作，知道数据区间内只有一个数字。
在本代码中，选择区间中的第一个数字，使其区间经过排序后该数字的左边的所有数字都比该数字小，右边的所有数字都比该数字大。
#include &lt;iostream&gt;
using namespace std;
const int maxn = 100;
int A[maxn],n;
int partitions(]]></description><category></category></item><item><title><![CDATA[归并排序的循环实现]]></title><link>https://blog.youkuaiyun.com/lvonge/article/details/106454884</link><guid>https://blog.youkuaiyun.com/lvonge/article/details/106454884</guid><author>lvonge</author><pubDate>Sun, 31 May 2020 14:08:59 +0800</pubDate><description><![CDATA[归并排序的循环实现的原理和递归是一样的，只是把递归改成了循环。
详情可戳：递归排序的递归实现
代码如下：
#include &lt;iostream&gt;
#include &lt;algorithm&gt;
using namespace std;
const int maxn = 110;
int n,one,A[maxn];
void merges(int A[],int L1,int R1,int L2,int R2){
    int i = L1,j = L2,temp[maxn],index]]></description><category></category></item><item><title><![CDATA[归并排序的递归实现]]></title><link>https://blog.youkuaiyun.com/lvonge/article/details/106454160</link><guid>https://blog.youkuaiyun.com/lvonge/article/details/106454160</guid><author>lvonge</author><pubDate>Sun, 31 May 2020 13:18:38 +0800</pubDate><description><![CDATA[归并排序是一种很经典的算法。
原理就是 把一个数组按照五五开的方式分成小块，然后再一个一个的归并起来。
在归并的过程之中，也要保证两个区间内的数字在归并前的时候是有序的，并且在归并完成之后也是有序的。这样一直归并下去，直到数据的区间是数组头到数组尾。
#include &lt;iostream&gt;
#include &lt;vector&gt;
using namespace std;
vector&lt;int&gt; w;
void merges(int L1,int R1,int L2,int R]]></description><category></category></item><item><title><![CDATA[快速幂]]></title><link>https://blog.youkuaiyun.com/lvonge/article/details/106433042</link><guid>https://blog.youkuaiyun.com/lvonge/article/details/106433042</guid><author>lvonge</author><pubDate>Fri, 29 May 2020 21:32:57 +0800</pubDate><description><![CDATA[快速幂是快速解决a的b次方对m进行取模的问题。
通常来说，求a的b次方对m的%，就是用一个循环，然后让a乘以自己，持续b次。但是在数据量太大的情况下，很可能会超时。
所以就有了快速幂的方式。
使用&amp;的方式判定b所对应的二进制结尾（二进制代码最右边）是1还是0从而判断b是奇数还是偶数。
再用b &gt;&gt;符号来让b右移1位，相当于抹去最右边的一位二进制。
#include &lt;iostream&gt;
using namespace std;
typedef long long LL;
LL]]></description><category></category></item><item><title><![CDATA[二分查找]]></title><link>https://blog.youkuaiyun.com/lvonge/article/details/106423138</link><guid>https://blog.youkuaiyun.com/lvonge/article/details/106423138</guid><author>lvonge</author><pubDate>Fri, 29 May 2020 12:36:40 +0800</pubDate><description><![CDATA[二分查找算法是一种很简单的算法。可以很快的找出某一个数字的序号，但是需要注意的是二分查找只能在有序数组的基础上查找。
先输入一个整数N，再输入N个整数，这N个整数就组成了一个数组。最后再输入M和M个数字，每次输入一个数字，都会输出这个数字在数组中的位置。
输出位置的时候，默认的开始下标为0.
#include &lt;iostream&gt;
#include &lt;algorithm&gt;
#include &lt;vector&gt;
using namespace std;
vector&lt;i]]></description><category></category></item><item><title><![CDATA[基于全排列的N皇后暴力]]></title><link>https://blog.youkuaiyun.com/lvonge/article/details/106422796</link><guid>https://blog.youkuaiyun.com/lvonge/article/details/106422796</guid><author>lvonge</author><pubDate>Fri, 29 May 2020 12:09:01 +0800</pubDate><description><![CDATA[N皇后是算法的经典问题，以下提供一种基于全排列的N皇后的解法。
首先，N皇后的起始要求是指的是 不能有任意两个皇后是同行、同列、同一个斜排。所以可以很自然的联想到全排列来解决这个问题。
例如，1 2 3的全排列有1 2 3,1 3 2,2 1 3,2 3 1,3 2 1,3 1 2六种。它们可以看做是六种皇后摆放的位置描述。
举个栗子，1 3 2 可以看做第一行第一列放置一个皇后，第二行第三列放置一个皇后，第三行第二列放置一个皇后。3 1 2也可以看做是第一行第三列放置一个皇后，第二行第一列放置一个皇后，第]]></description><category></category></item><item><title><![CDATA[全排列]]></title><link>https://blog.youkuaiyun.com/lvonge/article/details/106422495</link><guid>https://blog.youkuaiyun.com/lvonge/article/details/106422495</guid><author>lvonge</author><pubDate>Fri, 29 May 2020 11:47:21 +0800</pubDate><description><![CDATA[很简单的全排列算法，基于vector和递归生成。
首先输入一个数N，代表要排列的数的个数，再输入N个数。然后进行全排列并且输出。
#include &lt;iostream&gt;
#include &lt;cstdio&gt;
#include &lt;vector&gt;
#include &lt;algorithm&gt;
using namespace std;
const int maxn = 1010;
int n,one,res[maxn];
vector&lt;int&gt; p;
bool]]></description><category></category></item><item><title><![CDATA[插入排序]]></title><link>https://blog.youkuaiyun.com/lvonge/article/details/106397616</link><guid>https://blog.youkuaiyun.com/lvonge/article/details/106397616</guid><author>lvonge</author><pubDate>Thu, 28 May 2020 10:01:17 +0800</pubDate><description><![CDATA[很经典的插入排序算法。和选择排序一样，也很简单。
把数组分为有序和无序两个部分，然后再将无序部分中的第一个数插入有序部分，使得有序部分仍然有序并且变大，无序部分变小。
#include &lt;iostream&gt;
#include &lt;vector&gt;
using namespace std;
vector&lt;int&gt; A;
void insertSort(){
    for(int i = 1;i &lt; A.size();i ++){
        int j = i,te]]></description><category></category></item><item><title><![CDATA[选择排序]]></title><link>https://blog.youkuaiyun.com/lvonge/article/details/106397082</link><guid>https://blog.youkuaiyun.com/lvonge/article/details/106397082</guid><author>lvonge</author><pubDate>Thu, 28 May 2020 09:39:55 +0800</pubDate><description><![CDATA[非常简单的选择排序代码，使用vector实现。
思路就是将数组分成无序和有序两个部分。然后每次在无序的部分中找到一个最小的值放在有序的部分中。时间复杂度为O(N^2)，考场上建议直接使用sort()。
#include &lt;iostream&gt;
#include &lt;vector&gt;
using namespace std;
vector&lt;int&gt; res;
void selectSort(){
    for(int i = 0;i &lt; res.size();i ++){]]></description><category></category></item><item><title><![CDATA[PAT B1009 说反话（使用stringstream解决）]]></title><link>https://blog.youkuaiyun.com/lvonge/article/details/106396680</link><guid>https://blog.youkuaiyun.com/lvonge/article/details/106396680</guid><author>lvonge</author><pubDate>Thu, 28 May 2020 09:25:31 +0800</pubDate><description><![CDATA[原题目描述为：
给定一句英语，要求你编写程序，将句中所有单词的顺序颠倒输出。
输入格式：
测试输入包含一个测试用例，在一行内给出总长度不超过 80 的字符串。字符串由若干单词和若干空格组成，其中单词是由英文字母（大小写有区分）组成的字符串，单词之间用 1 个空格分开，输入保证句子末尾没有多余的空格。
输出格式：
每个测试用例的输出占一行，输出倒序后的句子。
输入样例：
Hello World Here I Come
输出样例：
Come I Here World Hello
题目思路：
我看了很多大佬的代码]]></description><category></category></item><item><title><![CDATA[进制转换(支持十进制以上的情况)]]></title><link>https://blog.youkuaiyun.com/lvonge/article/details/106396218</link><guid>https://blog.youkuaiyun.com/lvonge/article/details/106396218</guid><author>lvonge</author><pubDate>Thu, 28 May 2020 09:01:52 +0800</pubDate><description><![CDATA[基础的进制转换模板
支持10进制以上，大于十进制的位数用大写字母表示
首先 输入一个数字和其进制，就能输出其数字的十进制数。
再输入一个十进制数字和其进制，就能输出其数字的进制数。
第一次输入数字的时候，可以输入大写英文字母来表示大于10的数字。
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;sstream&gt;
#include &lt;algorithm&gt;
using namespace std;

void to_]]></description><category></category></item><item><title><![CDATA[PAT A1010 Radix(细节很多的一道题)]]></title><link>https://blog.youkuaiyun.com/lvonge/article/details/106008624</link><guid>https://blog.youkuaiyun.com/lvonge/article/details/106008624</guid><author>lvonge</author><pubDate>Fri, 08 May 2020 23:08:09 +0800</pubDate><description><![CDATA[原题目描述为：
Given a pair of positive integers, for example, 6 and 110, can this equation 6 = 110 be true? The answer is yes, if 6 is a decimal number and 110 is a binary number.
Now for any pair of positive integers N​1  and N​2 , your task is to find the radi]]></description><category></category></item></channel></rss>