用户名

hugward

Email

abcdefghij

个性签名

#include #include using namespace std; struct wint{ int arr[1001] = {},len = 1,nag = 1; string getstr(){ string t = (nag ? "" : "-"); for(int i=1;i<=len;i++) t += char(arr[i]+'0'); return t; } void init(long long data){ if(data < 0){ nag = 0; data = -data; } len = 0; while(data){ arr[++len] = data % 10; data /= 10; } } void init(string data){ if(data[0] == '-'){ nag = 0; data = data.substr(1); } len = data.size(); for(int i=1;i<=len;i++) arr[i] = data[i-1] - '0'; } void input(){ string t; cin >> t; init(t); } void output(char end){ cout << getstr() << end; } void output(string end){ cout << getstr() << end; } void output(){ cout << getstr(); } void clear(){ for(int i=1;i<=1000;i++) arr[i] = 0; len = 1; nag = 1; } int getlen(){ return len; } void copyto(wint &other){ other.len = len; other.nag = nag; for(int i=1;i<=len;i++) other.arr[i] = arr[i]; } void copyas(wint other){ len = other.len; nag = other.nag; for(int i=1;i<=len;i++) arr[i] = other.arr[i]; } void reverse(){ for(int i=1;i<=len/2;i++) swap(arr[i],arr[len-i+1]); } }; bool operator==(wint fir,wint sec){ if(fir.len != sec.len || fir.nag != sec.nag) return 0; for(int i=1;i<=fir.len;i++) if(fir.arr[i] != sec.arr[i]) return 0; return 1; } bool operator!=(wint fir,wint sec){ return !(fir == sec); } bool operator<(wint fir,wint sec){ if(fir.nag < sec.nag) return 1; if(fir.nag > sec.nag) return 0; if(fir.len < sec.len) return 1; if(fir.len > sec.len) return 0; for(int i=1;i<=fir.len;i++){ if(fir.arr[i] > sec.arr[i]) return 0; if(fir.arr[i] < sec.arr[i]) return 1; } return fir != sec; } bool operator<=(wint fir,wint sec){ return fir < sec || fir == sec; } bool operator>(wint fir,wint sec){ return !(fir <= sec); } bool operator>=(wint fir,wint sec){ return !(fir < sec); } void swap(wint &fir,wint &sec){ wint temp; temp.copyas(fir); sec.copyto(fir),temp.copyto(sec); } wint max(wint fir,wint sec){ if(fir > sec) return fir; else return sec; } wint min(wint fir,wint sec){ if(fir < sec) return fir; else return sec; } wint plusnum(wint fir,wint sec){ wint ans,cfir,csec; cfir.copyas(fir),csec.copyas(sec); cfir.reverse(),csec.reverse(); bool pluser = 0; ans.nag = max(fir,sec).nag; ans.len = max(fir,sec).len; if((fir.nag == 1 && sec.nag == 1) || (fir.nag == 0 && sec.nag == 0)){ for(int i=1;i<=ans.len;i++){ ans.arr[i] = cfir.arr[i] + csec.arr[i] + pluser; pluser = ans.arr[i] / 10; ans.arr[i] %= 10; } if(pluser) ans.arr[++ans.len] = 1; } else{ if(csec > cfir) swap(cfir,csec); for(int i=1;i<=ans.len;i++){ ans.arr[i] = cfir.arr[i] - csec.arr[i] - pluser; pluser = bool(ans.arr[i] < 0); if(pluser) ans.arr[i] += 10; } while(ans.len > 1 && ans.arr[ans.len] == 0) ans.len--; } ans.reverse(); return ans; } wint minusnum(wint fir,wint sec){ wint csec,temp; csec.copyas(sec); csec.nag = !csec.nag; return plusnum(fir,csec); } wint timesnum(wint fir,wint sec){ wint ans,cfir,csec; cfir.copyas(fir),csec.copyas(sec); cfir.reverse(),csec.reverse(); ans.nag = !(cfir.nag ^ csec.nag); ans.len = cfir.len + csec.len - 1; for(int i=1;i<=cfir.len;i++){ int timeser = 0; for(int j=1;j<=csec.len;j++){ ans.arr[i+j-1] += cfir.arr[i] * csec.arr[j] + timeser; timeser = ans.arr[i+j-1] / 10; ans.arr[i+j-1] %= 10; } if(timeser){ if(i + csec.len > ans.len) ans.len++; ans.arr[i+csec.len] += timeser; } } ans.reverse(); return ans; } pair<wint,wint> divmod(wint fir,wint sec){ wint c,t,f,temp; int pos = sec.len+1; while(fir >= sec){ t.arr[pos] = 1,t.len = pos; c.copyas(timesnum(t,sec)); temp.init((long long)pos); while(fir >= c){ fir.copyas(minusnum(fir,c)); f.copyas(plusnum(temp,f)); } t.clear(),c.clear(),pos--; } return pair<wint,wint>{f,fir}; } wint dividednum(wint fir,wint sec){ return divmod(fir,sec).first; } wint modnum(wint fir,wint sec){ return divmod(fir,sec).second; } int main(){

return 0;

}

注册于

2024-07-21 8:59:59

统计

帖子

该用户从未发表帖子

比赛

比赛 名次 积分
初始积分 1500