**高精度加法模板
#include<bits/stdc++.h>
using namespace std;
vector<int> add(vector<int> &A,vector<int> &B)
{
if(A.size()<B.size()) return add(B,A);
vector<int> C;
int t=0;
for(int i=0;i<A.size();i++)
{
t+=A[i];
if(i<B.size()) t+=B[i];
C.push_back(t%10);
t/=10;
}
if(t) C.push_back(t);
return C;
}
int main()
{
string a,b;
vector<int> A,B;
cin>>a>>b;
for(int i=a.size()-1;i>=0;i--) A.push_back(a[i]-'0');
for(int i=b.size()-1;i>=0;i--) B.push_back(b[i]-'0');
auto C=add(A,B);
for(int i=C.size()-1;i>=0;i--) printf("%d",C[i]);
return 0;
}
**1268 - 高精度加法
**来源:东方博宜oj oj.czos.cn
#include<bits/stdc++.h>
using namespace std;
string s1,s2;
int a[250],b[250],c[500];
int main()
{
cin>>s1>>s2;
for(int i=0;i<s1.size();i++) a[i]=s1[s1.size()-1-i]-'0';
for(int i=0;i<s2.size();i++) b[i]=s2[s2.size()-1-i]-'0';
int len=max(s1.size(),s2.size());
for(int i=0;i<len;i++)
{
c[i]=c[i]+a[i]+b[i];
if(c[i]>=10)
{
c[i+1]=c[i+1]+c[i]/10;
c[i]=c[i]%10;
}
}
if(c[len]) len++;
for(int i=len-1;i>=0;i--)
{
printf("%d",c[i]);
}
return 0;
}
**高精度减法
#include<bits/stdc++.h>
using namespace std;
//判断是否有A>=B
bool cmp(vector<int> &A,vector<int> &B)
{
if(A.size()!=B.size()) return A.size()>B.size();
for(int i=A.size()-1;i>=0;i--)
{
if(A[i]!=B[i]) return A[i]>B[i];
}
return true;
}
vector<int> sub(vector<int> &A,vector<int> &B)
{
vector<int> C;
for(int i=0,t=0;i<A.size();i++)
{
t=A[i]-t;
if(i<B.size()) t-=B[i];
C.push_back((t+10)%10);
if(t<0) t=1;
else t=0;
}
//删除前导0
while(C.size()>1&&C.back()==0) C.pop_back();
return C;
}
int main()
{
string a,b;
vector<int> A,B;
cin>>a>>b;
for(int i=a.size()-1;i>=0;i--) A.push_back(a[i]-'0');
for(int i=b.size()-1;i>=0;i--) B.push_back(b[i]-'0');
if(cmp(A,B))
{
auto C=sub(A,B);
for(int i=C.size()-1;i>=0;i--) printf("%d",C[i]);
}
else
{
auto C=sub(B,A);
printf("-");
for(int i=C.size()-1;i>=0;i--) printf("%d",C[i]);
}
return 0;
}
** 1269 - 高精度减法
** 来源:东方博宜oj oj.czos.cn
*解法一:
#include<bits/stdc++.h>
using namespace std;
string s1,s2;
int a[250],b[250],c[250];
int len,p;
char f='+';
int main()
{
cin>>s1>>s2;
if(s1.size()<s2.size()||(s1.size()==s2.size()&&s1<s2))
{
f='-';
swap(s1,s2);
}
for(int i=0;i<s1.size();i++) a[i]=s1[s1.size()-1-i]-'0';
for(int i=0;i<s2.size();i++) b[i]=s2[s2.size()-1-i]-'0';
len=s1.size();
for(int i=0;i<len;i++)
{
if(a[i]<b[i])
{
a[i+1]=a[i+1]-1;
a[i]=a[i]+10;
}
c[i]=a[i]-b[i];
}
if(f=='-') cout<<f;
for(int i=len;i>=0;i--)
{
if(c[i])
{
p=i;
break;
}
}
for(int i=p;i>=0;i--)
{
cout<<c[i];
}
return 0;
}
*解法二:
#include<bits/stdc++.h>
using namespace std;
int a[250],b[250],c[250];
bool f=true;
string sub(string s1,string s2)
{
for(int i=0; i<s1.size(); i++) a[i]=s1[s1.size()-1-i]-'0';
for(int i=0; i<s2.size(); i++) b[i]=s2[s2.size()-1-i]-'0';
int len=s1.size();
for(int i=0; i<len; i++)
{
if(a[i]<b[i])
{
a[i+1]=a[i+1]-1;
a[i]=a[i]+10;
}
c[i]=a[i]-b[i];
}
string s="";
while(c[len]==0&&len>=0) len--;
for(int i=0;i<=len;i++)
{
s=char(c[i]+'0')+s;
}
if(len==-1) s="0";
return s;
}
int main()
{
string s1,s2;
cin>>s1>>s2;
if(s1.size()<s2.size()||(s1.size()==s2.size()&&s1<s2)) f=false;
if(f) cout<< sub(s1,s2);
else
{
printf("-");
cout<< sub(s2,s1);
}
return 0;
}
**高精度乘法
#include<bits/stdc++.h>
using namespace std;
vector<int> mul(vector<int> &A,int b)
{
vector<int> C;
int t=0;
for(int i=0;i<A.size()||t;i++)
{
if(i<A.size()) t+=A[i]*b;
C.push_back(t%10);
t/=10;
}
while(C.size()>1&&C.back()==0) C.pop_back();
return C;
}
int main()
{
string a;
int b;
cin>>a>>b;
vector<int> A;
for(int i=a.size()-1;i>=0;i--) A.push_back(a[i]-'0');
auto C=mul(A,b);
for(int i=C.size()-1;i>=0;i--) cout<< C[i];
return 0;
}
** 1271 - 高精度整数除法
** 来源:东方博宜oj oj.czos.cn
*解法一
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a,b,i,n,t;
cin>>a>>b>>n;
cout<<a/b<< ".";
t=a%b;
for(int i=1;i<=n;i++)
{
t=t*10;
cout<<t/b;
t=t%b;
}
return 0;
}
*解法二
#include<bits/stdc++.h>
using namespace std;
string div(int a,int b,int n)
{
string s=to_string(a/b)+'.';
int t=a%b;
for(int i=0;i<n;i++)
{
t*=10;
s+=char(t/b+'0');
t%=b;
}
return s;
}
int main()
{
int a,b,n;
cin>>a>>b>>n;
cout<<div(a,b,n);
return 0;
}