1.高精
先讲难的,除法(蒟蒻只会写高精除以低精,555),另外的太煎蛋了,懒得写注释了
#include <iostream>
using namespace std;
const int maxn=10010;
int a[maxn],c[maxn];
int main(){
string s; // 被除数
long long b,x=0; // 除数,累加余数时要乘以10,不能定义为int类型
cin>>s>>b;
int n=s.length();
for(int i=0;i<n;i++) // 将第1个字符串存储在数组中,正序存储
a[i+1]=s[i]-'0';
for(int i=1;i<=n;i++){ // 除法运算
x=x*10+a[i]; // 累加上次的余数和当前位
c[i]=x/b; // 记录商
x%=b; // 更新余数
}
int lenc=1;
while(c[lenc]==0&&lenc<n) lenc++; // 删除前导0
for(int i=lenc;i<=n;i++) // 从高位到低位依次输出答案
cout<<c[i];
cout<<endl<<x; //输出余数
return 0;
}
乘法(这个会写高精,喜)
#include<bits/stdc++.h>
using namespace std;
int x[1001] = {0},y[1001] = {0},z[10002] = {0},len;
string a,b;
int main()
{
cin>>a>>b;
if(a == "0" || b == "0")
{
cout<< 0 ;
return 0;
}
for(int i = 0;i < a.size();i++)
{
x[a.size()-1-i] = a[i] - '0';
}
for(int i = 0;i < b.size();i++)
{
y[b.size()-1-i] = b[i] - '0';
}
for(int i = 0;i < a.size();i++)
{
for(int j = 0;j <b.size();j++)
{
z[i+j] += x[i] * y[j];
if(z[i+j] > 9)
{
z[i+j+1] += z[i+j] / 10;
z[i+j] %= 10;
}
}
}
len = a.size() + b.size();
if(z[len-1] == 0) len--;
for(int i = len-1;i >= 0;i--) cout<<z[i];
return 0;
}
加法
#include<bits/stdc++.h>
using namespace std;
string a,b;
int x[1001] = {0},y[1001] = {0},z[1002] = {0},len;
int main()
{
cin>>a>>b;
for(int i = 0;i < a.size();i++)
{
x[a.size()-1-i] = a[i] - '0';
}
for(int i = 0;i < b.size();i++)
{
y[b.size()-1-i] = b[i] - '0';
}
len = max(a.size(),b.size());
for(int i = 0;i < len;i++)
{
z[i] += x[i] + y[i];
if(z[i] > 9)
{
z[i+1] += 1;
z[i] -= 10;
}
}
if(z[len]) len++;
for(int i = len-1;i >= 0;i--) cout<<z[i];
return 0;
}
减法
#include<bits/stdc++.h>
using namespace std;
string a,b;
int x[1001] = {0},y[1001] = {0},z[1002] = {0},len;
int main()
{
cin>>a>>b;
if(a.size()<b.size() ||(a < b && a.size() == b.size()))
{
cout<<'-';
swap(a,b);
}
for(int i = 0;i < a.size();i++)
{
x[a.size()-1-i] = a[i] - '0';
}
for(int i = 0;i < b.size();i++)
{
y[b.size()-1-i] = b[i] - '0';
}
len = max(a.size(),b.size());
for(int i = 0;i < len-1;i++)
{
z[i] += x[i] - y[i];
if(z[i] < 0)
{
z[i+1] -= 1;
z[i] += 10;
}
}
z[len-1] += x[len-1] - y[len-1];
while(z[len-1]==0 && len > 1)
{
len--;
}
for(int i = len-1;i >= 0;i--)
{
cout<<z[i];
}
return 0;
}
哎呀,22:15了,先洗洗睡了,未完待续。
OK,9:45了,继续更新