PKU 1001 Exponentiation

#include<iostream> using namespace std; const int MAX = 1000; int a[MAX];//存放原始数 int b[MAX];//存放运算结果,但最终结果存放于数组c[] int c[MAX];//临时数组 void init()//初始化 { for(int i=0;i<MAX;i++) { a[i]=0; b[i]=0; c[i]=0; } b[0]=1; } void mul()//高精度乘法,x[0]表示最低位 { int i,j,k;int ac; for(i=0;i<150;i++){c[i]=0;}//清零临时数组 for(i=0;i<150;i++) { ac=0; for(j=0;j<6;j++) { c[j+i]=c[j+i]+a[j]*b[i]; ac=c[i+j]/10; c[j+i]%=10; c[i+j+1]+=ac; } } for(k=0;k<150;k++)//将结果存进数组b[] { b[k]=c[k]; } } void main() { int n;//阶 char temp[7];//数 while(cin>>temp>>n) { init(); int i;int j;int k; for(i=5;i>=0;i--){if(temp[i]=='.')break;}//找到小数点的位置 for(j=i;j<5;j++){temp[j]=temp[j+1];}//去掉小数点 for(j=0;j<5;j++){a[4-j]=temp[j]-'0';}//反转整个数并由字符转化为数字,准备做高精度乘法 for(j=0;j<n;j++)//做n次乘法 mul(); //至此这个算法结束,一下是格式化输出,麻烦... for(k=0;k<1000;k++){if(c[k]!=0)break;} for(j=999;j>=0;j--) { if((c[j]!=0)||(j==(5-i)*n))break;//在数组中寻找最高位 } if(c[j]!=0)//判断运算结果的整数部分是否为零(为零则不需要输出整数部分) { for(;j>=(5-i)*n;j--)cout<<c[j]; if(k<((5-i)*n))cout<<'.'; for(;j>=k;j--)cout<<c[j]; cout<<endl; } else { j--; if(k<((5-i)*n))cout<<"."; for(;j>=k;j--)cout<<c[j]; cout<<endl; } } }

 

你可能感兴趣的:(PKU 1001 Exponentiation)