大数加法模板
///大数加法模板
///c++函数传入两个string,返回string
string sum(string s1,string s2)
{
if(s1.length()<s2.length())
{
string temp=s1;
s1=s2;
s2=temp;
}
for(int i=s1.length()-1,j=s2.length ()-1;i>=0;i--,j--)
{
s1[i]=s1[i]+(j>=0?s2[j]-'0':0);
if(s1[i]-'0'>=10)
{
s1[i]=(s1[i]-'0')%10+'0';
if(i)
s1[i-1]++;
else
s1='1'+s1;
}
}
while(s1.length()>1 &&s1[0]=='0') s1.erase(s1.begin() );
return s1;
}
大数减法
#include<bits/stdc++.h>
using namespace std;
string a,b;
string sub(string a,string b)
{
if(a.length() <b.length() ||a.length() ==b.length() &&a<b)
{
a.swap(b);
}
for(int i=a.length() -1, j=b.length() -1;i>=0;--i,--j)
{
a[i]=a[i]-(j>=0?b[j]-'0':0);
if(a[i]<'0')
{
a[i]+=10;
--a[i-1];
}
}
while(a.length()>1 &&a[0]=='0') a.erase(a.begin() );
if(a.empty() ) a="0";
return a;
}
bool check(){
if(a.length()<b.length())
return true;
if(a.length()>b.length())
return false;
for(int i=0;i<a.length();i++){
if(a[i]<b[i])
return true;
}
return false;
}
int main()
{
while(cin>>a>>b)
{
if(check()) cout<<'-'<<sub(a,b)<<endl;
else
cout<<sub(a,b)<<endl;
}
return 0;
}
升级版
bool check(string a,string b){
if(a.size()>b.size())
return false;
if(a.size()<b.size())
return true;
int l=a.size();
for(int i=0;i<l;i++)
if(a[i]<b[i])
return true;
return false;
}
string sub(string a,string b){
if(check(a,b)) swap(a,b);
for(int i=a.size()-1,j=b.size()-1;i>=0;i--,j--){
a[i]=a[i]-(j>=0?b[j]-'0':0);
if(a[i]<'0'){
a[i]+=10;
a[i-1]--;
}
}
while(a.size()>1&&a[0]=='0') a.erase(a.begin());
return a;
}
大数相余
#include<bits/stdc++.h>
using namespace std;
char s[1005];
int main(){
int b;
while(~scanf("%s %d",s,&b)){
getchar();
int len=strlen(s);
int ans=(s[0]-'0')%b;
int t=ans;
for(int i=1;i<len;i++){
ans=((t*10+s[i]-'0'))%b;
t=ans;
}
cout<<ans<<endl;
}
return 0;
}
大数乘法
#include<bits/stdc++.h>
using namespace std;
const int N=1005;
vector<int> ans(N);
void muat(string a,string b){
int la=a.size(),lb=b.size();
for(int i=0;i<la;i++)
for(int j=0;j<lb;j++)
ans[i+j+1]+=(a[i]-'0')*(b[j]-'0');
for(int i=la+lb-1;i>0;i--){
ans[i-1]+=ans[i]/10;
ans[i]%=10;
}
}
int main(){
string s1,s2;
while(cin>>s1>>s2){
int la=s1.size(),lb=s2.size();
vector<int> t(N);
ans.swap(t);
muat(s1,s2);
for(int i=0;i<=la+lb-1;i++){
if(i==0&&ans[i]>0) cout<<ans[i];
if(i) cout<<ans[i];
}
cout<<endl;
}
return 0;
}
#include<iostream>
#include<vector>
using namespace std;
string muat(string a,string b){
int la=a.size(),lb=b.size();
vector<int> ans(la+lb+1);
string s;
for(int i=0;i<la;i++)
for(int j=0;j<lb;j++)
ans[i+j+1]+=(a[i]-'0')*(b[j]-'0');
for(int i=la+lb-1;i>0;i--){
ans[i-1]+=ans[i]/10;
ans[i]%=10;
}
for(int i=0;i<=la+lb-1;i++){
if(i==0&&ans[i]>0) s.push_back(ans[i]+'0');
if(i) s.push_back(ans[i]+'0');
}
return s;
}
int main(){
string s1,s2;
while(cin>>s1>>s2){
int la=s1.size(),lb=s2.size();
cout<<muat(s1,s2)<<endl;
}
return 0;
}