sgu112 高精度大整数乘方
2014-07-16 20:36
204 查看
#include<iostream> #include<cstring> using namespace std; int jian(int a[],int b[],int c[],int len) { int i; for(i=0;i<len;i++) { c[i]+=a[i]-b[i]; if(c[i]<0) { c[i]+=10; c[i+1]--; } } while(c[len-1]==0) len--; if(len==0) return 1; else return len; } int mult(int a[],int b[],int c[],int len1,int len2) { int d[1000],e[1000],len,i,j; //妈蛋,害我调了半天 memset(d,0,sizeof(d)); memset(e,0,sizeof(e)); for(i=0;i<len2;i++) d[i]=b[i]; for(i=0;i<len1;i++) for(j=0;j<len2;j++) e[i+j]+=a[i]*d[j]; len=len1+len2; for(i=0;i<len;i++) c[i]=e[i]; for(i=0;i<len-1;i++) { c[i+1]+=c[i]/10; c[i]=c[i]%10; } if(c[len-1]>0) len++; return len-1; } bool cmp(int a[],int b[],int len1,int len2) { int i; if(len1>len2) return true; if(len1<len2) return false; if(len1==len2) { for(i=0;i<len1;i++) { if(a[i]>b[i]) return true; if(a[i]<b[i]) return false; } if(i==len1) return true; } } int main() { int a,b,a0,b0,i,a1[10],b1[10]; int a2[1000],b2[1000],c[1000]; int len,len1,len2,len3,len4; cin>>a>>b; memset(a1,0,sizeof(a1)); memset(b1,0,sizeof(b1)); memset(a2,0,sizeof(a2)); memset(b2,0,sizeof(b2)); memset(c,0,sizeof(c)); i=0; a0=a;b0=b; while(a0>0) { a1[i]=a0%10; a0/=10; i++; } len1=i; i=0; while(b0>0) { b1[i]=b0%10; b0/=10; i++; } len2=i; if(a==0) len1=1; if(b==0) len2=1; a2[0]=1; b2[0]=1; len3=1; len4=1; for(i=0;i<b;i++) len3=mult(a1,a2,a2,len1,len3); for(i=0;i<a;i++) len4=mult(b1,b2,b2,len2,len4); if(cmp(a2,b2,len3,len4)) { len=jian(a2,b2,c,len3); for(i=len-1;i>=0;i--) cout<<c[i]; cout<<endl; } else { len=jian(b2,a2,c,len4); cout<<"-"; for(i=len-1;i>=0;i--) cout<<c[i]; cout<<endl; } return 0; }
相关文章推荐
- 高精度练习之超大整数开根
- 高精度练习之超大整数开根
- cv3123 高精度练习之超大整数乘法(FFT)
- BZOJ 1225: [HNOI2001] 求正整数( dfs + 高精度 )
- 考虑方程式:a^3 + b^3 = c^3 + d^3其中:“^”表示乘方。a、b、c、d是互不相同的小于30的正整数。这个方程有很多解。比如:a = 1,b=12,c=9,d=10 就是一个解
- 华为OJ------高精度整数加法
- 大整数类-高精度模板
- POJ 1504 Adding Reversed Numbers (水题,高精度整数加法)
- 整数高精度运算的库(加法,减法,乘法,除法,取模)
- [BZOJ1263][SCOI2006]整数划分(数学+高精度)
- 【BZOJ1263】【SCOI2006】整数划分 高精度+构造
- 华为OJ(高精度整数加法)
- BZOJ 1263: [SCOI2006]整数划分( 高精度 )
- 高精度_大整数开根
- ”高精度整数删去若干位以使剩下的值最小“问题
- 最短路径--高精度整数(java实现)
- C++的高精度整数加法运算算法
- POJ1001 Exponentiation【高精度乘方】
- 高精度乘方一
- sgu112 高精度(用java水啊水)