高精度加法
建立两个数组分别存储两个数字,还有一个数组来存储他们的和
数组倒置后直接相加
c[i]=a[i]+b[i];
此时并未考虑进位,我们现在进位
if(c[i]>9)
c[i+1]+=c[i]/10,c[i]=c[i]%10;
最后的一步很重要
考虑到最后一位的进位可能会为0
倒置输出后就会多一位数
所以要判断最后一位是否为0
if(c[i+1]>0) l++;
最后以l的长度输出就好了(l=i+1或i)
高精度乘法
仍然是创建两个数组来存储两个乘数,再创建一个数组来存储积
两个for循环来进行第一步相乘(不考虑进位)
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
c[i+j]=c[i]*c[j];
其中i是用来错位相加的
现在来进位
for(int k=0;k<l;k++)
c[k+1]+=c[k]/10,c[k]=c[k]%10;
最后还是一样
0的问题
if(c[k+1]>0) l++;
最后以l的长度输出就好了(l=k+1或k)
矩阵旋转
顺时针旋转
换列再对换
swap(a[i][j],a[n-1-i][j]);
swap(a[i][j],a[j][i]);
逆时针旋转
换行再对换
swap(a[i][j],a[i][n-1-j]);
swap(a[i][j],a[j][i]);
最后附上顺时针旋转的代码
#include<iostream>
using namespace std;
void swap(int& i, int& j)
{
int temp = 0;
temp = i;
i = j;
j = temp;
}
int main()
{
int a[3][3];
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
cin >> a[i][j];
}
}
for (int i = 0; i < 3; i++)
{
for (int j =i+1; j < 3; j++)
{
swap(a[i][j], a[j][i]);
}
}
for (int j= 0; j < 2; j++)
{
for (int i = 0; i < 3; i++)
{
swap(a[i][j], a[i][2 - j]);
}
}
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
cout << a[i][j] << ' ';
}
cout << endl;
}
}