#include <iostream>
#include <vector>
using namespace std;
vector<int> a, b;
vector<int> add(vector<int> &a, vector<int> &b){
if(a.size() < b.size()) return add(b, a);
vector<int> c;
int t = 0;//缓存a[i]+b[i]
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 s1, s2;
cin>>s1>>s2;
for(int i=s1.size()-1; i>=0; i--) a.push_back(s1[i]-'0');
for(int i=s2.size()-1; i>=0; i--) b.push_back(s2[i]-'0');
vector<int> c = add(a, b);
for(int i=c.size()-1;i>=0;i--)
printf("%d",c[i]);
return 0;
}
#include <iostream>
#include <vector>
using namespace std;
vector<int> a, b;
bool flag;//判断结果是否为负数
vector<int> sub(vector<int> &a, vector<int> &b){
int la = a.size(), lb = b.size();
if(la < lb){
flag = true;
return sub(b, a);
}
vector<int> c;
int t = 0;
for(int i=0; i<la; i++){
t = a[i] - t;
if(i < lb) t -= b[i];
c.push_back((t+10)%10);
if(t < 0) t = 1;
else t = 0;
}
while(c.size()>1 && c.back() == 0) c.pop_back();
return c;
}
int main(){
string s1, s2;
cin>>s1>>s2;
for(int i=s1.size()-1; i>=0; i--) a.push_back(s1[i]-'0');
for(int i=s2.size()-1; i>=0; i--) b.push_back(s2[i]-'0');
vector<int> c = sub(a, b);
if(flag) cout<<'-';
for(int i=c.size()-1;i>=0;i--)
printf("%d",c[i]);
return 0;
}
#include <iostream>
#include <vector>
using namespace std;
vector<int> a, b;
vector<int> mul(vector<int> &a, vector<int> &b){
vector<int> c(a.size()+b.size()+10,0);
for(int i=0; i<a.size(); i++)
for(int j=0; j<b.size(); j++)
c[i+j] += a[i] * b[j];
int t = 0;
for(int i=0; i<c.size(); i++){
t += c[i];
c[i] = t % 10;
t /= 10;
}
if(t) c.push_back(t);
while(c.size()>1 && c.back() == 0) c.pop_back();
return c;
}
int main(){
string s1, s2;
cin>>s1>>s2;
for(int i=s1.size()-1; i>=0; i--) a.push_back(s1[i]-'0');
for(int i=s2.size()-1; i>=0; i--) b.push_back(s2[i]-'0');
vector<int> c = mul(a, b);
for(int i=c.size()-1;i>=0;i--)
printf("%d",c[i]);
return 0;
}
A/B Problem
开long long 懂得都懂
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> a;
vector<long long> div(vector<int> &a,long long b){
vector<long long> c;
long long r = 0;//余数(初始化为0)
for (int i=a.size()-1; i>=0; i--)//从高位到低位进行处理
{
r = r * 10 + a[i];
c.push_back(r / b);
r %= b;
}
reverse(c.begin(), c.end());//填充的时候是按高位到低位填充
while (c.size() > 1 && c.back() == 0) c.pop_back();
return c;
}
int main(){
string s1;
long long b;
cin>>s1>>b;
for(int i=s1.size()-1; i>=0; i--) a.push_back(s1[i]-'0');
vector<long long> c = mul(a, b);
for(int i=c.size()-1;i>=0;i--)
printf("%d",c[i]);
return 0;
}