#include <iostream> #include <string> using namespace std; // 1. 创建变量(包括三个数组、数组的大小N、三个数组的长度,t表示进位) const int N = 520; int a[N], b[N], ans[N], len_a, len_b, len_ans, t; void readDataAndReverse(int* arr, int& len); void addData(int* a, int* b, int& len_ans); void reversePrint(int* ans); int main() { // 2. 读入数据并倒置 readDataAndReverse(a, len_a); readDataAndReverse(b, len_b); // 3. 数组做累加 addData(a, b, len_ans); // 4. 逆序输出 reversePrint(ans); return 0; } 函数功能:对两个数组进行累加
------------------------------------------------------------------------------------------------------------------------------
自定义排序准则 上面我们说到sort()函数可以自定义排序准则,以便满足不同的排序情况。使用sort()我们不仅仅可以从大到小排或者从小到大排,还可以按照一定的准则进行排序。比如说我们按照每个数的个位进行从大到小排序,我们就可以根据自己的需求来写一个函数作为排序的准则传入到sort()中。 我们可以将这个函数定义为:
bool cmp(int x,int y){ return x % 10 > y % 10; }
#include<iostream> #include<algorithm> using namespace std; bool cmp(int x,int y){ return x % 10 > y % 10; } int main(){ int num[10] = {65,59,96,13,21,80,72,33,44,99}; sort(num,num+10,cmp); for(int i=0;i<10;i++){ cout<<num[i]<<" "; }//输出结果:59 99 96 65 44 13 33 72 21 80 return 0; }
--------------------------------------------------------------------------------------------------------------------------------
#include <iostream> #include <cstdio> #include <cstring> using namespace std; //定义常量,常量值根据实际需要修改,此算法模拟乘法竖式计算过程 //代码做过一定优化,数组空间从下标0(第一个元素)开始使用 #define LENGTH 1000 char a1[LENGTH], b1[LENGTH]; int a[LENGTH], b[LENGTH], c[LENGTH]; int main() { int lena, lenb, lenc, i, j, x; //读取乘数 gets_s(a1); gets_s(b1); lena = strlen(a1); lenb = strlen(b1); //把刚才读取进来的乘数,逆序转换成int类型数字保存到int数组里 for (i = 0; i < lena; i++) { a[lena - i - 1] = a1[i] - 48; } for (i = 0; i < lenb; i++) { b[lenb - i - 1] = b1[i] - 48; } for (i = 0; i < lena; i++) { x = 0;//初始化进位 for (j = 0; j < lenb; j++) { //模拟乘法竖式,进位、错位相加 c[i + j] = a[i] * b[j] + x + c[i + j]; x = c[i + j] / 10;//乘法进位 c[i + j] %= 10;//进位后保留个位 } c[lenb + i] = x; //错位相加高位进位(先把进位加到高位) } lenc = lena + lenb;//两个非零因数相乘,积的位数要么是两个因数位数之和,要么是两个因数位数之和-1 //检查最高位是否为0,如果为0,退一位,while循环可以保证即使因数是0也能输出正确的结果而不输出多余前导0 while (c[lenc] == 0 && lenc > 0) { lenc--; } for (i = lenc; i >= 0; i--) { cout << c[i]; } return 0; }
------------------------------------------------------------------------------------------------------------------------------
矩阵的旋转
oid spin(int x,int y,int r)//顺时针旋转90° { for(int i=x-r;i<=x+r;i++) { for(int k=y-r;k<=y+r;k++) temp[i][k]=square[i][k]; } int x1=x+r,y1=y-r; for(int i=x-r;i<=x+r;i++) { for(int k=y-r;k<=y+r;k++) { square[i][k]=temp[x1][y1]; x1--; } x1=x+r,y1++; } }
oid spin_(int x,int y,int r)//逆时针旋转90° { for(int i=x-r;i<=x+r;i++) { for(int k=y-r;k<=y+r;k++) temp[i][k]=square[i][k]; } int x1=x-r,y1=y+r; for(int i=x-r;i<=x+r;i++) { for(int k=y-r;k<=y+r;k++) { square[i][k]=temp[x1][y1]; x1++; } y1--,x1=x-r; } }