高精度之+×÷
以下是三种高精度算术的模版:
高精度加法:
string s="0123456789",s1,s2; int ss1[1005],ss2[1005],len; void dashu(string s1,int ss1[]) { for(int i=s1.length()-1;i>=0;i--) { for(int j=0;j<10;j++) { if(s[j]==s1[i]) ss1[s1.length()-1-i]=j; } } } void dashu_add(int ss1[],int ss2[]) { int len1=s1.length(),len2=s2.length(); if(len1>len2) len=len1; else len=len2; for(int i=0;i<len;i++) { ss1[i]+=ss2[i]; if(ss1[i]>=10) { ss1[i+1]+=ss1[i]/10; ss1[i]%=10; } } int l=-1; for(int i=len;i>=0;i--) { if(ss1[i]!=0) { l=i; break; } } if(l>=0) { for(;l>=0;l--) cout<<ss1[l]; } else cout<<0; }相关题目链接:HDU 1002
高精度乘法:
void bignum_fac(int n) { int a[100000]; int m=1,b,d,i,j; memset(a,0,sizeof(a)); a[1]=1; for(i=2;i<=n;i++) { d=0; for(j=1;j<=m;j++) { b=a[j]*i+d; a[j]=b%100000; d=b/100000; } if(d) { a[++m]=d; } } cout<<a[m]; for(j=m-1;j>0;j--) { printf("%05d",a[j]); } printf("\n"); }相关题目链接:HDU 1042
高精度除法:
相关题目链接:POJ 2325char s[1005]; char division[1005];//存储进行高精度除法的数据 bool bignum_div(int x) { int tot=0,num=0; for(int i=0;s[i];i++) { num=num*10+s[i]-'0'; division[tot++]=num/x+'0'; num%=x; } division[tot]='\0';//利于进行strcpy() if(num==0) //有适合的除数 { int i=0; while(division[i]=='0') i++; strcpy(s,division+i);//比如49->07,那么下一轮s就变成7,多余的i个0都除掉 return true; } else return false; }