本代码实现大数幂的计算,自己练习算法。。。 #include <cstdlib> #include <string.h> #include <iostream> using namespace std; int length,lengthTemp;//两个大数的长度 /**************************************************/ /* 字符串到整数的转化 */ /**************************************************/ int StringToInt(char s[],int arr[]) { int len = strlen(s); //memset(arr,0,sizeof(int)*count); for(int i=0; i<len; i++) { arr[i] = s[len-i-1]-48; } return 0; } /****************************************************/ /* 整数到字符串的转化 */ /****************************************************/ int IntToString(int arr[],char s[],int count) { for(int i=0; i<count; i++) { s[i] = arr[count-i-1]+48; } return 0; } /*****************************************************/ /* 两个大数想乘 */ /*****************************************************/ int multiplication(int arrOrigin[],int arrTemp[],int arrResult[]) { int carry = 0; int tempnum,j; memset(arrResult,0,sizeof(int)*200); for(int i=0; i<lengthTemp;i++) { carry = 0; for(j=0; j<length; j++) { tempnum=(arrOrigin[j]*arrTemp[i]+carry+arrResult[i+j])%10; carry = (arrOrigin[j]*arrTemp[i]+carry+arrResult[i+j])/10; arrResult[i+j]=tempnum; } arrResult[i+j]=carry; } return 0; } int main(int argc, char *argv[]) { char s[6]; char strResult[200]; int n,len,i=0; int j,k; bool flags; int numOrigin[6]; int numtemp[200]; int numResult[200]; while(scanf("%s%d",&s,&n)==2) { len = strlen(s); i=0; flags = false; while(i<len) {//求小数点位置 if(s[i]=='.') { flags = true; break; } i++; } k = i; if(flags) {//如果是小数,去掉数字末尾多余的0 i = 1; while(s[len-i]=='0') { s[len-i]='/0'; i++; } if(s[len-i]=='.') { s[len-i]='/0'; flags = false; } } len = strlen(s); if(flags) {//如果是小数,去掉小数点 memcpy(s+k,s+k+1,len-k-1); s[len-1]='/0'; } //实现幂运算 length = strlen(s); memset(numOrigin,0,6*sizeof(int)); memset(numtemp,0,200*sizeof(int)); numtemp[0]=1; StringToInt(s,numOrigin); j=1; lengthTemp=1; while(j<=n) { multiplication(numOrigin,numtemp,numResult); lengthTemp = j*length; memcpy(numtemp,numResult,200*sizeof(int)); j++; } //数据转化为字符串类型 memset(strResult,0,200); IntToString(numResult,strResult,lengthTemp); //如果是小数,添加小数点 if(flags) { k = k*n; memcpy(strResult+k+1,strResult+k,lengthTemp-k); strResult[k]='.'; } //去掉数据前面多余的0 for(i=0; strResult[i]=='0' && strResult[i]!='.' && i<lengthTemp; i++); if(i==lengthTemp) cout<<strResult[0]<<endl; else if(strResult[i]=='.') { memcpy(strResult,strResult+i,lengthTemp+1-i); strResult[lengthTemp+1-i]='/0'; } else { memcpy(strResult,strResult+i,lengthTemp+1-i); strResult[lengthTemp+1-i]='/0'; } //输出结果 printf("%s/n",strResult); } system("PAUSE"); return EXIT_SUCCESS; } 本算法已经在http://acm.pku.edu.cn测试通过,希望多拍砖。