目录
高精度
一、加法
/*高精度加法*/
#include<bits/stdc++.h>
using namespace std;
#define MAX 1001
string s1,s2;
int a[MAX],b[MAX],c[MAX];
int _s1,_s2,_s;
void _JF(int a[],int b[],int c[]){
for(int i=0;i<_s;i++){
c[i]+=a[i]+b[i];//逐位相加
c[i+1]=c[i]/10; //大于等于10的数向前进1位
c[i]%=10;//对10取模使得每一位都小于10
}
if(c[_s]) _s++;//处理_s下标是否为0,不为0将长度+1
}
void _solve(){
cin>>s1>>s2;
_s1=s1.size();
_s2=s2.size();
for(int i=0;i<_s1;i++){
a[_s1-i-1]=s1[i]-'0';//字符转换为数字
}
for(int i=0;i<_s2;i++){
b[_s2-i-1]=s2[i]-'0';
}
_s=max(_s1,_s2);
_JF(a,b,c);
for(int i=_s-1;i>=0;i--){
cout<<c[i];
}
}
int main(){
int T=1;
//cin>>T;
while(T--){
_solve();
}
return 0;
}
二、减法
/*高精度减法*/
#include<bits/stdc++.h>
using namespace std;
#define MAX 1001
string s1,s2;
int a[MAX],b[MAX],c[MAX];
void _solve(){
cin>>s1>>s2;
char flag='+';
if(s1.size()<s2.size()||(s1.size()==s2.size()&&s1<s2)){
swap(s1,s2);//交换s1,s2的值,使得s1一直是大的数
flag='-';
}
for(int i=0;i<s1.size();i++){
a[s1.size()-i-1]=s1[i]-'0';
}
for(int i=0;i<s2.size();i++){
b[s2.size()-i-1]=s2[i]-'0';
}
for(int i=0;i<s1.size();i++){
if(a[i]<b[i]){
a[i]=a[i]+10;//不够借10
a[i+1]=a[i+1]-1;//后一位借10,则前一位-1
}
c[i]=a[i]-b[i];//逐位相减
}
if(flag=='-'){
cout<<flag;
}
int idex=0;
for(int i=s1.size()-1;i>=0;i--){
if(c[i]!=0){
idex=i;//记录结果不为0的下标
break;
}
}
for(int i=idex;i>=0;i--){
cout<<c[i];
}
}
int main(){
int T=1;
//cin>>T;
while(T--){
_solve();
}
return 0;
}
三、乘法
/*高精度乘法*/
#include<bits/stdc++.h>
using namespace std;
#define MAX 1001
string s1,s2;
int _s,_s1,_s2;
int a[MAX],b[MAX],c[MAX+MAX];
void _Che(int a[],int b[],int c[]){
for(int i=0;i<_s1;i++){
for(int j=0;j<_s2;j++){
c[i+j]+=a[i]*b[j];
c[i+j+1]+=c[i+j]/10;//大于等于10则进位
c[i+j]%=10;
}
}
while(_s&&c[_s]==0) _s--;
}
void _solve(){
cin>>s1>>s2;
_s1=s1.size();
_s2=s2.size();
_s=_s1+_s2;
for(int i=0;i<_s1;i++){
a[_s1-i-1]=s1[i]-'0';
}
for(int i=0;i<_s2;i++){
b[_s2-i-1]=s2[i]-'0';
}
_Che(a,b,c);
for(int i=_s;i>=0;i--){
cout<<c[i];
}
}
int main(){
int T=1;
//cin>>T;
while(T--){
_solve();
}
return 0;
}
四、除法
1.高/低
/*高精度除法*/
// 高精度/低精度
#include<bits/stdc++.h>
using namespace std;
#define MAX 1001
typedef long long ll;
string s;
ll a,b[MAX],c[MAX],_s;
void D_Chu(int a,int b[],int c[]){
ll x=0;
for(int i=_s-1;i>=0;i--){
x=x*10+b[i];
c[_s-i-1]=x/a;
x=x%a;//取余
}
reverse(c,c+_s); //翻转
while(_s&&c[_s]==0) _s--;//处理多余的0
}
void _solve(){
cin>>s>>a;
_s=s.size();
for(int i=_s-1;i>=0;i--) b[_s-i-1]=s[i]-'0';
D_Chu(a,b,c);
for(int i=_s;i>=0;i--){
cout<<c[i];
}
}
int main(){
int T=1;
//cin>>T;
while(T--){
_solve();
}
return 0;
}