高精度模板(未完待续)

mac2022-06-30  24

高精度题目(持续更新)

\(1.\) 国王游戏

高精 \(\times\) 低精

细节: \(sum[i]=tmp\) \(mod\) \(10\) 而不是 \(sum[i]\) \(mod\) \(=10\) ,是因为由现在还没进的位数取最后一位而得,不是本位取最后一位而得。

$View$ $Code$ int lens=1,sum[MAX]={0,1}; inline void mul(int x) { int tmp=0; for(register int i=1;i<=lens;i++) sum[i]*=x; for(register int i=1;i<=lens;i++) { tmp+=sum[i]; sum[i]=tmp; tmp/=10; } while(tmp) { lens++; sum[lens]=tmp; tmp/=10; } }

高精 \(\div\) 低精

细节:竖式上的进位值 \(tmp\) 要定义、赋值,当前答案数组 \(ans\) 要及时清空且无需先赋值。

$View$ $Code$ int lens=1,lena=1,sum[MAX]={0,1},ans[MAX]; inline void div(int x) { memset(ans,0,sizeof(ans)); lena=lens; int tmp=0; for(register int i=lena;i;i--) { tmp*=10; tmp+=sum[i]; if(tmp>=x) { ans[i]=tmp/x; tmp%=x; } } while(ans[lena]==0) { if(lena==1) break; lena--; } }

高精两数大小比较

细节:当前答案数组 \(ans\) 无需先赋值,最大值数组 \(maxn\) 要先赋值。

\(View\) \(Code\)

int lenm=1,lena=1,maxn[MAX]={0,1},ans[MAX]; inline void cmp1() { if(lena>lenm) { for(register int i=lena;i;i--) maxn[i]=ans[i]; lenm=lena; } else if(lena==lenm) { for(register int i=lena;i;i--) { if(maxn[i]<ans[i]) { for(register int j=lena;j;j--) maxn[j]=ans[j]; break; } } } }

高精数输出

细节:最大值数组 \(maxn\) 要先赋值。

$View$ $Code$ int lenm=1,maxn[MAX]={0,1}; inline void write() { for(register int i=lenm;i;i--) printf("%d",maxn[i]); }

转载于:https://www.cnblogs.com/Peter0701/p/11237076.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)