您的位置:首页 > 编程语言

高精度! 模板代码!

2017-11-09 07:57 274 查看

前言

高精高精模拟竖式的高精!

本人在此提供模板

细节不多讲

需要注意的是

一切代码的格式都是a(+ - / *)b=c的形式

t=temp 中间变量

代码

减法

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=100100;
int a[maxn],b[maxn],c[maxn];
int sizea,sizeb,sizec;
void swapp(){
int sizet=sizeb,t[sizeb+1];
memset(t,0,sizeof(t));
for(int i=1;i<=sizeb;i++) t[i]=b[i];
memset(b,0,sizeof(b));
for(int i=1;i<=sizea;i++) b[i]=a[i];
sizeb=sizea;
memset(a,0,sizeof(a));
for(int i=1;i<=sizet;i++) a[i]=t[i];
sizea=sizet;
}
void init(){
string sa,sb;
cin>>sa>>sb;
sizea=sa.size();
sizeb=sb.size();
for(int i=0,j=sizea;i<sizea;i++,j--)
a[j]=sa[i]-'0';
for(int i=0,j=sizeb;i<sizeb;i++,j--)
b[j]=sb[i]-'0';
}
void comp(){
if(sizeb>sizea){
cout<<"-";
swapp();
}
else if(sizeb==sizea){
int temp=sizeb;
while(a[temp]==b[temp]) temp--;
if(a[temp]<b[temp]){
cout<<"-";
swapp();
}
}
}
void make_(){
//a>b
for(int i=1;i<=sizea;i++){
c[i]=a[i]-b[i];
if(c[i]<0){
c[i]+=10;
int temp=i+1;
while(!a[temp])
a[temp++]=9;
a[temp]--;
}
}
sizec=sizea;
while(!c[sizec]) sizec--;
}
void fckitout(){
for(int i=sizec;i>0;i--) cout<<c[i];
}
int main(){
init();
comp();
make_();
fckitout();
return 0;
}


加法

#include<iostream>
using namespace std;
const int maxn=100001;
string s1,s2;
int a[maxn],b[maxn],c[maxn];
int sizea,sizeb,sizec;
bool aa,bb;

void init(){
bool ok=false;
sizea=s1.size();
sizeb=s2.size();
for(int i=0,j=sizea;i<sizea;i++,j--){
if(s1[i]=='-'){
aa=true;
continue;
}
if(s1[i]-'0'>0) ok=true;
if(!ok&&s1[i]=='0') continue;
a[j]=s1[i]-'0';
}
if(aa==true) sizea--;
if(ok==false) sizea=1;
ok=false;
for(int i=0,j=sizeb;i<sizeb;i++,j--){
if(s2[i]=='-'){
bb=true;
continue;
}
if(s2[i]-'0'>0) ok=true;
if(!ok&&s2[i]=='0') continue;
b[j]=s2[i]-'0';
}
if(bb==1) sizeb--;
if(ok==false) sizeb=1;
}

void jia(){
int temp=0;
sizec=max(sizea,sizeb);
for(int i=1;i<=sizec;i++){
c[i]=a[i]+b[i]+temp;
temp=c[i]/10;
c[i]%=10;
}
if(temp!=0){
sizec++;
c[sizec]=temp;
}
}

int main(){
cin>>s1;
cin>>s2;
init();
jia();
for(int i=sizec;i>=1;i--) cout<<c[i];
cout<<endl;
return 0;
}


乘法

//还没过样例~
//明儿个noip 这坑就放这儿了


除法

//怎么想noip也不会考的吧
//不用学的吧
//嗯不用不用不考不考
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言