sgu112 高精度大整数乘方

来源:互联网 发布:js获取application值 编辑:程序博客网 时间:2024/05/23 18:33
#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;elsereturn 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;}


0 0
原创粉丝点击