高精度(壓位+判負數+加減乘+讀寫)

本算法目前屬于還處于測試狀態,歡迎Hack!


struct gj{bool fu; //是否是負數int tt,mod; //高精的長度int s[40005]; //壓位用的數組inline gj(){ //整體初始化fu=0; tt=0; mod=1e9;memset(s,0,sizeof(s));}inline gj read(){  register char ch; //高精度讀入while(!isdigit(ch=getchar()))if(ch=='-')fu=1;char _[100005]; rg l=0,r=-1; _[0]=ch;while(isdigit(_[++l]=getchar()));; tt=l/9-!(l%9);for(rg i=(l-1)%9+1;i;--i) (s[tt]*=10)+=_[++r]^48;for(rg i=tt-1;i>=0;--i)for(rg j=0;j<9;++j)(s[i]*=10)+=(_[++r]^48);while(tt&&!s[tt])--tt;; return (*this);}inline void print(){ //高精度輸出if(fu)putchar('-');printf("%d",s[tt]);for(rg i=tt-1;i>=0;--i)printf("%09d",s[i]);putchar('\n');}inline bool operator >(const gj &x){ //定義大于if(tt!=x.tt)return tt>x.tt;for(rg i=tt;i>=0;--i)if(s[i]!=x.s[i])return s[i]>x.s[i];return 0;}inline bool operator <(const gj &x){ //定義小于if(tt!=x.tt)return tt<x.tt;for(rg i=tt;i>=0;--i)if(s[i]!=x.s[i])return s[i]<x.s[i];return 0;}inline gj operator =(int x){ //int的等于while(tt)s[tt]=0,--tt;s[0]=x%mod; s[1]=x/mod;if(s[1])tt=1;; return *this;}inline gj operator =(ll x){ //ll的等于while(tt)s[tt]=0,--tt;while(x)s[tt]=x%mod,x/=mod,++tt;if(!s[tt])--tt;; return *this;}inline void add(const gj &x){ //加法的底層rg sign=0; if(x.tt>tt)tt=x.tt;for(rg i=0;i<=tt;++i){s[i]+=x.s[i]+sign; sign=0;if(s[i]>mod)s[i]-=mod,sign=1;}if(sign)s[++tt]=1;}inline void cut(const gj &x){ //減法的底層if(fu)cout<<54564<<endl;rg sign=0; for(rg i=0;i<=tt;++i){s[i]-=x.s[i]+sign; sign=0;if(s[i]<0)s[i]+=mod,sign=1;}while(tt&&!s[tt])--tt;if(!tt&&!s[tt]) fu=0;}inline void mul(const gj &x){ //乘法的底層gj y; ll num; y.tt=tt+x.tt;for(rg i=0;i<=tt;++i){ num=0;for(rg j=0;j<=x.tt;++j){num=(ll)s[i]*x.s[j]+y.s[j+i]+num;y.s[j+i]=num%mod; num/=mod;} if(num)y.s[x.tt+i+1]=num;}if(num)++y.tt;; *this=y;}inline void operator +=(gj x){ //賦值加法重載if(fu==x.fu){(*this).add(x); return;}if(*this>x) (*this).cut(x);else x.cut(*this),*this=x,fu^=1;}inline gj operator +(const gj &x){ //加法正常重載gj y=*this; y+=x; return y;}inline void operator -=(gj x){ //賦值減法重載if(fu!=x.fu){(*this).add(x); return;}if(*this>x){(*this).cut(x); return;}x.cut(*this); *this=x; if(s[tt])fu^=1;}inline gj operator -(const gj &x){ //減法正常重載gj y=*this; y-=x; return y;}inline void operator *=(gj x){ //賦值乘法重載if(!s[tt]||!x.s[x.tt]){gj y; *this=y;}if(fu!=x.fu)fu=1;else fu=0;; (*this).mul(x);}inline gj operator *(const gj &x){ //乘法正常重載gj y=*this; y*=x; return y;}inline gj operator *(int x){  gj y; y=x; return (*this)*y;}inline void operator *=(int x){gj y; y=x; (*this)*=y;}inline gj operator +(int x){  gj y; y=x; return (*this)+y;}inline void operator +=(int x){gj y; y=x; (*this)+=y;}inline gj operator -(int x){  gj y; y=x; return (*this)-y;}inline void operator -=(int x){gj y; y=x; (*this)-=y;}
};

轉載于:https://www.cnblogs.com/812-xiao-wen/p/10901972.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/277669.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/277669.shtml
英文地址,請注明出處:http://en.pswp.cn/news/277669.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Hadoop從安裝Linux到搭建集群環境

簡介與環境準備  hadoop的核心是分布式文件系統HDFS以及批處理計算MapReduce。近年&#xff0c;隨著大數據、云計算、物聯網的興起&#xff0c;也極大的吸引了我的興趣&#xff0c;看了網上很多文章&#xff0c;感覺還是云里霧里&#xff0c;很多不必要的配置都在入門教程出現…

git推送本地分支到遠程分支

場景 有時候我們開發需要開一個分支,這樣可以有效的并行開發. 開分支有兩種方式: 一種是在遠程開好分支,本地直接拉下來;一種是本地開好分支,推送到遠程.遠程先開好分支然后拉到本地 git checkout -b feature-branch origin/feature-branch //檢出遠程的feature-branch分支到…

delphi 函數內創建對象 釋放_JavaScript 的函數底層運行機制

▲ 點擊上方藍字關注我 ▲文 / 景朝霞來源公號 / 朝霞的光影筆記ID / zhaoxiajingjing圖 / 自己畫目錄0 / 題(1)第一題(2)第二題1 / 引用數據類型&#xff1a;object2 / 引用數據類型&#xff1a;function(1)第二題&#xff0c;簡圖(2)創建函數(3)執行函數(4)閉包3 / 練習題(1)…

Unity3D學習筆記之五為Prefab添加材質

本次筆記中&#xff0c;我們將利用unity來創建并使用材質&#xff0c;把材質添加到我們的Prefab中去。這一系列教程以及素材均參考自人人素材翻譯組出品的翻譯教程《Unity游戲引擎的基礎入門視頻教程》&#xff0c;下載鏈接附在第二篇學習筆記中。繼續上次筆記中所記錄的東西&a…

分布式版本控制系統之Git

Git Git 是目前世界上最先進的分布式版本控制系統&#xff08;沒有之一&#xff09;作用 源代碼管理為什么要進行源代碼管理? 方便多人協同開發方便版本控制Git的誕生 作者是 Linux 之父&#xff1a;Linus Benedict Torvalds當初開發 Git 僅僅是為了輔助 Linux 內核的開發&…

oo第三次博客-JML規格

這三周的作業主要是圍繞以JML來約束代碼開發&#xff0c;以確保程序的正確性與魯棒性。 Part 1&#xff1a;三次作業的實現與bug 第一次作業沒有任何算法和數據結構上的難度&#xff0c;對于Path和PathContainer的各個方法的實現按照給出的規格復讀即可。唯一的難點&#xff08…

Kinect開發筆記之一Kinect詳細介紹

畢業設計的課題我選擇了結合Kinect和Unity3D開發體感游戲&#xff0c;這是我十分感興趣的一個課題&#xff0c;所以做好當然責無旁貸。準備再寫一系列Kinect的學習筆記&#xff0c;記錄自己畢設一步一個腳印的歷程。1、Kinect背景介紹眾所周知&#xff0c;Kinect是一款集成了很…

獲取2個地址之間的距離(高德API)

2019獨角獸企業重金招聘Python工程師標準>>> string startLonLat SiteHelper.GetLonLat("大連"); //獲取起始地經度緯度 string endLonLat SiteHelper.GetLonLat("沈陽"); //獲取目的地經度緯度 int distance SiteHelper.GetDistance(star…

WPF屬性學習

一.WPF屬性系統 CLR屬性 .NET中的屬性稱為CLR屬性 轉載于:https://www.cnblogs.com/programme-maker/p/10910166.html

chemdraw怎么連接兩個結構_利用神經結構搜索構建快速準確輕量級的超分辨率網絡...

介紹我們知道&#xff0c;把神經網絡拆解&#xff0c;可以把它歸結為幾個元素的排列組合而成&#xff0c;例如&#xff0c;以卷積神經網絡為例&#xff0c;其主要由卷積層&#xff0c;池化層&#xff0c;殘差連接&#xff0c;注意力層&#xff0c;全連接層等組成&#xff0c;如…

Unity3D學習筆記之六創建更多的Prefab

在寫完第五篇后&#xff0c;因為不知名的原因&#xff0c;我突然不能夠上傳100KB以上的圖片在博客中了。等了幾天還是這樣&#xff0c;所以我用PS把圖片的分辨率一張張調低&#xff0c;讓圖片的大小都在100左右&#xff0c;將積攢了四篇的學習筆記一起發上來&#xff0c;也算彌…

iOS底層探索(二) - 寫給小白看的Clang編譯過程原理

iOS底層探索(一) - 從零開始認識Clang與LLVM 寫在前面 編譯器是屬于底層知識&#xff0c;在日常開發中少有涉及&#xff0c;但在我的印象中&#xff0c;越接近底層是越需要編程基本功&#xff0c;也是越復雜的。但要想提升技術卻始終繞不開要對底層原理的探究&#xff0c;很多資…

四、構建Node Web程序

---恢復內容開始--- 一、HTTP 服務器的基礎知識 1、Node如何向開發者呈現HTTP請求 2、一個用“Hello World”做響應的HTTP服務器 它用了默 認的狀態碼200&#xff08;表明成功&#xff09;和默認的響應頭 3、讀取請求頭及設定響應頭 Node提供了幾個修改HTTP響應頭的方法&#x…

datagrid 什么時候結束編輯_2020年中考結束后,什么時候出分?什么時候報志愿?...

導語7月19日下午16:00&#xff0c;2020年北京中考正式落下帷幕。考試結束后&#xff0c;很多家長和考生都會長舒一口氣&#xff0c;但北京中考在線團隊提醒你&#xff0c;現在還不是放松的時刻&#xff0c;中考結束后&#xff0c;還有成績查詢和填報志愿等重要事件等著你。那么…

Unity3D學習筆記之七創建自己的游戲場景

到現在為止我們已經擁有了比較完備的Prefab&#xff0c;已經可以創建宏大的游戲場景&#xff0c;并以第一人稱視角在場景中漫游了。這里給大家做個小的示范&#xff0c;建一個小場景大家在創建場景的時候需要自由發揮&#xff0c;做個盡量大的場景出來。這一系列教程以及素材均…

excel if in函數_【Excel函數】Small+Index+IF 一對N返回

通常情況下&#xff0c;Vlookup和lookup函數只能返回滿足條件的第一個&#xff0c;剩余的都不會返回。 這也是其函數的一個弊端之一。 若是按照條件&#xff0c;返回所有滿足條件的數據&#xff08;1->N&#xff09;的&#xff0c;可是適用組合函數。 Index返回位置&#xf…

Unity3D學習筆記之八為場景添加細節(一)

這一系列教程以及素材均參考自人人素材翻譯組出品的翻譯教程《Unity游戲引擎的基礎入門視頻教程》&#xff0c;下載鏈接附在第二篇學習筆記中。我花了30分鐘做了一個中等大小的迷宮場景&#xff0c;不知道大家自己發揮&#xff0c;做的場景大小如何。在完成場景之后&#xff0c…

mysql數據庫表的管理(增刪改)

表字段管理1. 添加到末尾alter table 表名 add 字段名 數據類型;2 添加到開頭alter table 表名 add 數據類型 first;3. 添加到指定位置alter table 表名 add 新字段名 數據類型 after 原有字段名&#xff1b;4. 刪除字段alter table 表名 drop 字段名;5. 修改數據類型alter ta…

哪個app最費電_微波爐和烤箱,買哪個劃算?

微波爐和烤箱不能說買哪個劃算&#xff0c;而是看哪個更適合&#xff1f;我家微波爐和烤箱兩個都有&#xff0c;所以這個問題我來回答一下。雖然外形上看起來&#xff0c;微波爐和烤箱似乎沒有多大的區別&#xff0c;從功能上看&#xff0c;它們也都是加熱&#xff0c;但它們側…

MATLAB數值計算與符號運算

符號計算 存放的是精確數據&#xff0c;耗存儲空間 &#xff0c;運行速度慢&#xff0c;但結果精度高&#xff1b; 數值計算則是以一定精度來計算的&#xff0c;計算結果有誤差&#xff0c;但是運行速度快。轉載于:https://www.cnblogs.com/shawnchou/p/10927680.html