- 2026suzhongcheng 的博客
gjd
- 2024-10-22 20:02:10 @
#include<bits/stdc++.h>
using namespace std;
int h(int len,int i,vector<short> b){
if(len<=i) return 0;
return b[i];
}
struct Bigint{
vector<short> b;
bool op;int len,base;
Bigint(){
b.clear();
op=true;
len=0;
base=10;
}
friend ostream & operator<<(ostream & out,const Bigint & a);
friend istream & operator>>(istream & in,Bigint & a);
bool operator>(Bigint a){
if(a.len>len) return false;
if(a.len<len) return true;
for(int i=0;i<a.len;i++){
if(b[i]>a.b[i]) return true;
if(b[i]<a.b[i]) return false;
}
return false;
}
bool operator<(Bigint a){
if(a.len<len) return false;
if(a.len>len) return true;
for(int i=0;i<a.len;i++){
if(b[i]>a.b[i]) return false;
if(b[i]<a.b[i]) return true;
}
return false;
}
bool operator==(Bigint a){
if(a.len!=len) return false;
for(int i=0;i<a.len;i++){
if(b[i]!=a.b[i]) return false;
}
return true;
}
bool operator>=(Bigint a){
if(a.len>len) return false;
if(a.len<len) return true;
for(int i=0;i<a.len;i++){
if(b[i]>a.b[i]) return true;
if(b[i]<a.b[i]) return false;
}
return true;
}
bool operator<=(Bigint a){
if(a.len<len) return false;
if(a.len>len) return true;
for(int i=0;i<a.len;i++){
if(b[i]>a.b[i]) return false;
if(b[i]<a.b[i]) return true;
}
return true;
}
bool operator!=(Bigint a){
if(a.len!=len) return true;
for(int i=0;i<a.len;i++){
if(b[i]!=a.b[i]) return true;
}
return false;
}
Bigint operator+(Bigint a){
Bigint c;
if((a.op==false||op==false)&&(a.op!=op)){
return *this-a;
}
else{
for(int i=0,t=0;i<(a.len>len?a.len:len)||t!=0;i++){
if(i>=(a.len>len?a.len:len)){
c.b.push_back(t%base);
t=t/base;
}
else{
c.b.push_back((((h(len,i,b))+(h(a.len,i,a.b))+t)%base));
t=((h(len,i,b))+(h(a.len,i,a.b)+t))/base;
}
c.len++;
}
}
return c;
}
Bigint operator-(Bigint a){
Bigint c;
if(*this<a){
op=!op;
return *this+a;
}
if(*this==a){
return c;
}
for(int i=0,t=0;i<max(a.len,len);i++){
if(i>=max(a.len,len)){
if(b[i]-t<a.b[i]){
t=1;
b[i]+=10-t;
}
else t=0;
c.b.push_back(b[i]-a.b[i]);
cout<<b[i]-a.b[i];
}
}
return c;
}
Bigint operator*(Bigint a){
Bigint c;int m;
if(op==false||a.op==false&&!op==a.op) {
op=false;
}
else{
op=true;
}
for(int i=0;i<max(len,a.len);i++){
if(b[i]!=0||a.b[i]!=0){
m=i;
break;
}
if(b[i]==0){
c.b.push_back(0);
}
if(a.b[i]==0){
c.b.push_back(0);
}
}
for(int j=m,t=0;j<len||t!=0;j++){
for(int k=m;k<a.len||t!=0;k++){
if(h(max(len,a.len),j+k-1,b)!=0){
c.b.push_back((h(len,j,b)*h(a.len,k,a.b)+t)%base);
t=(h(len,j,b)*h(a.len,k,a.b)+t)/base;
c.len++;
}
else{
c.b[c.len-j-k]=(c.b[j+k]+h(len,j,b)+h(a.len,k,a.b)+t)%base;
t=(c.b[j+k]+h(len,j,b)*h(a.len,k,a.b)+t)/base;
}
cout<<c<<endl;
}
}
return c;
}
Bigint operator/(Bigint a){
Bigint c;
if(a>=*this) return c;
}
Bigint operator%(Bigint a){
if(*this<=a) return *this;
}
Bigint operator=(string s){
b.clear();
len=s.size();
if(s[0]=='-'){
len--;
op=false;
}
for(int i=0;i<len;i++){
if(s[i]>='0'&&s[i]<='9'){
b.push_back(s[i]-'0');
}
else{
b.push_back(s[i]-'A'+10);
}
}
return *this;
}
Bigint operator+=(string s){
Bigint c;
c=s;
*this=*this+c;
return *this;
}
Bigint operator-=(string s){
Bigint c;
c=s;
*this=*this-c;
return *this;
}
Bigint operator*=(string s){
Bigint c;
c=s;
*this=*this*c;
return *this;
}
Bigint operator/=(string s){
Bigint c;
c=s;
*this=*this/c;
return *this;
}
Bigint operator%=(string s){
Bigint c;
c=s;
*this=*this%c;
return *this;
}
void Binray(int a){
base=a;
return;
}
bool palindromes(){
int i;
for(i=0;i<len/2;i++){
if(b[i]!=b[len-i-1]) return false;
}
return true;
}
};
istream &operator>>(istream & in,Bigint & a){
string s;
int i,j=0;
in>>s;
a.len=s.size();
if(s[0]=='-'){
a.len--;
a.op=false;
j++;
}
for(i=a.len-1;i>=j;i--){
if(s[i]>='0'&&s[i]<='9'){
a.b.push_back(s[i]-'0');
}
else{
a.b.push_back(s[i]-'A'+10);
}
}
return in;
}
ostream &operator<<(ostream &out,const Bigint & a){
if(a.op==false) putchar('-');
for(int i=a.b.size()-1;i>=0;i--){
if(a.b[i]<10){
out<<a.b[i];
}
else{
out<<char('A'+a.b[i]-10);
}
}
return out;
}
int main(){
Bigint a,b;
a.Binray(10);
cin>>a>>b;
cout<<a-b;
return 0;
}
#pragma GCC target("avx")
#pragma GCC optimize(2,3,"Ofast","inline","-ffast-math")
#pragma GCC target("sse2,sse3,sse4,mmx")
#pragma omp parallel for
#pragma omp parallel num_threads(thread_count)
#pragma omp critical
#pragma omp parallel for reduction(+:sum)
#include<bits/stdc++.h>
using namespace std;
struct Bigint{
short index[205]={};
int len;
Bigint(string s="0"){
for(int i=s.size()-1,j=0;i>=0;i--,j++)
index[j]=(s[i]-'0');
len=strlen(index);
}
// Bigint operator[](int _index){
// retur index[_index];
// }
friend ostream & operator<<(ostream & out,const Bigint & a);
friend istream & operator>>(istream & in,Bigint & a);
Bigint operator+(Bigint a){
Bigint c;
int _len=max(len,a.len),j=0;
if(a.index[0]+index[0]>9) j++;
for(int i=_len-1;i>=0;i++){
c.index[i+j]=index[i]+a.index[i];
if(c.index[i+j]>9){
c.index[i-1+j]=(c.index[i+j]%10);
c.index[i+j]%=10;
}
}
c.len=strlen(c.index);
return c;
}
Bigint operator*(Bigint a){
Bigint c;
int _len=a.len+len,i,j;
for(i=len;i>=0;i--)
}
};
ostream & operator<<(ostream & out,const Bigint & a){
for(int i=a.len-1;i>=0;i--){
out<<a.index[i];
}
return out;
}
istream & operator>>(istream & in,Bigint & a){
string s;
in>>s;
a.len=s.size()
for(int i=a.len-1,j=0;i>=0;i++,j++){
a.index[j]=(s[i]-'0');
}
return in;
}
int main(){
return 0;
}