int y = 0, product = 1;//product在循环中会不断乘P,得到1, p,p^1.....
while(x != 0){
y += (x % 10) * product;
x /= 10;
product *= P;
}
int z[40], num = 0;
do{
z[num++] = y % Q;
y /= Q;
}while(y != 0);
void seleteSort(){
for(int i = 0; i < n; i++){
int k = i;
for(int j = i; i < n; i++){
if(A[j] < A[k]){
k = j;
}
}
int temp = A[i];
A[i] = A[k];
A[k] = temp;
}
}
int A[Maxn], n;//数组元素个数为n,下标从1~n
void insertSort(){
for(int i = 2; i <= n; i++){
int temp = A[i], j = i;
while(j > 1 && temp < A[j - 1]){
A[j] = A[j - 1];
j--;
}
A[j] = temp;
}
}
void merge(int A[], int L1, int R1, int L2, int R2){
int i = L1, j = L2;
int temp[maxn], index = 0;
while(L1 <= R1 && L2 <= R2){
if(A[i] < A[j]) temp[index++] = A[i++];
else temp[index++] = A[j++];
}
while(i <= R1) temp[index++] = A[i++];
while(j <= R2) temp[index++] = A[j++];
for(int i = 0; i < index; i++){
A[L1 + i] = temp[i];
}
}
void mergeSort(int A[], int left, int right){
if(left < right){
int mid = (left + right) / 2;
mergeSort(A, left, mid);
mergeSort(A, mid + 1, right);
merge(A, left, mid, mid + 1, right);
}
}
int Partition(int A[], int left, int right){
int temp = A[left];
while(left < right){
while(left < right && A[right] > temp) right--;
A[left] = A[right];
while(left < right && A[left] < temp) left++;
A[right] = A[left];
}
A[left] = temp;
return left;
}
//关键是第一次返回的主元位置,将数组划分为两个部分,然后递归继续划分
void qiuckSort(int A[], int left, int right){
if(left < right){
int pos = Partition(A, left, right);
quickSort(A, left, pos - 1);
quickSort(A, pos + 1, right);
}
}
bool isPrime(int n){
if(n <= 1) return false;
int sqr = (int)sqrt(n);
for(int i = 2; i <= sqr; i++){
if(n % i == 0) return false;
}
return true;
}
原文:https://www.cnblogs.com/tsruixi/p/13328081.html