#include <iostream> #include <algorithm> #include <iomanip> #include <string.h> using namespace std; const int MAXN=10005; const int BASE=100000; const int LEN=5;//防止int溢出,最多基数最多设为5位 int max(int a,int b) { if(a>b) return a; return b; } struct BigInt{ public: int e[MAXN]; int len; BigInt() { memset(e,0,sizeof(e)); len=0; } void set(int x) { while(x>0) { e[len++]=x%BASE; x/=BASE; } } bool operator>(const BigInt &b) { if(len>b.len) { return true; } else if(len==b.len) { int i; for(i=len-1;i>=0;i--) { if(e[i]>b.e[i]) return true; else if(e[i]<b.e[i]) return false; else ; } return false; } else { return false; } } BigInt operator+(const BigInt &b) { BigInt res; res.len=max(len,b.len); int up=0; for(int i=0;i<res.len;i++) { int z=e[i]+b.e[i]; res.e[i]=z%BASE; up=z/BASE; } if(up!=0) res.e[res.len++]=up; return res; } BigInt operator-(const BigInt &b) { BigInt res; res.len=max(len,b.len); int down=0; for(int i=0;i<res.len;i++) { int z=e[i]-b.e[i]-down; if(z<0) { z+=BASE; down=1; } else { down=0; } res.e[i]=z; } while(res.len>1&&res.e[res.len-1]==0) res.len--; return res; } BigInt operator*(const BigInt &b) { BigInt res; for(int i=0;i<len;i++) { int up=0; for(int j=0;j<b.len;j++) { int z=(e[i]*b.e[j]+res.e[i+j]+up); res.e[i+j]=z%BASE; up=z/BASE; } if(up!=0) res.e[i+b.len]=up; } res.len=len+b.len; while(res.len>1&&res.e[res.len-1]==0) res.len--; return res; } BigInt operator/(const int &b) { BigInt res=*this; int carry=0; for(int i=len-1;i>=0;i--) { res.e[i]+=carry*BASE; carry=res.e[i]%b; res.e[i]/=b; } while(res.len>1&&res.e[res.len-1]==0) res.len--; return res; } BigInt operator%(const int &b) { BigInt tmp=*this; BigInt B; B.set(b); BigInt res=tmp-(tmp/b)*B; return res; } friend ostream &operator<<(ostream &out,const BigInt &res) { out<<res.e[res.len-1]; for(int i=res.len-2;i>=0;i--) { out<<setw(LEN)<<setfill(‘0‘)<<res.e[i]; } out<<endl; return out; } }; int main() { BigInt res; res.set(1092); res=res%1091; cout<<res; return 0; }
时间: 2024-10-20 23:51:50