#include <iostream>
#include <string.h>
#define MAX 201
using namespace std;
int result[MAX], result1[MAX] ;
void Pow(int n, int *result1, int *r, int len1)
{
int len2, i, j, k ;
len2 = len1 ;
for(k = 1; k < n; ++k)
{
for(i = 0; i < len1; ++i)
for(j = 0; j < len2; ++j)
result[i + j] += r[i] * result1[j] ; //
for(i = 0; i < len1 + len2; ++i) //
{
if(result[i] > 9)
{
result[i + 1] += result[i] / 10 ;
result[i] %= 10 ;
}
}//
i = MAX - 1 ;
while (result[i] == 0)
--i ;
len2 = i + 1 ; //
for(j = 0; j < len2; ++j)
result1[j] = result[j] ; //
memset(result, 0, sizeof(result)) ; //
}
}
void Display(int point)
{
int i, len2, z ;
i = MAX - 1 ;
while(result1[i] == 0 && i >= 0)
--i ;
len2 = i ; //
if(len2 == -1)
{
cout<<"0"<<endl ;
return ;
}
if(point > len2 + 1)
{
cout<<"." ;
for(i = 0; i < point - len2 - 1; ++i)
cout<<"0" ;
}
i = 0 ;
while(result1[i] == 0 && i < point)
i++ ;
z = i ; //
for(i = len2; i >= z; --i)
{
if(i == point - 1)
cout<<"." ;
cout<<result1[i] ;
}
cout<<endl ;
}
int main()
{
int r[6] ; //
char R[7] ; //
int i, j, point, len, n ;
while (cin>>R>>n)
{
memset(result, 0, sizeof(result)) ;
memset(result1, 0, sizeof(result1)) ;
point = 0 ;
len = strlen(R) ;
for(i = 5, j = 0; i >= 0; --i)
{
if(R[i] == '.')
{
point = 5 - i ; //
len -= 1 ;
}
else
{
r[j] = R[i] - '0' ; //
result1[j] = R[i] - '0' ;
++j ;
}
}
//
Pow(n, result1, r, len) ; //
Display(point * n) ;
}
return 0 ;
#include <string.h>
#define MAX 201
using namespace std;
int result[MAX], result1[MAX] ;
void Pow(int n, int *result1, int *r, int len1)
{
int len2, i, j, k ;
len2 = len1 ;
for(k = 1; k < n; ++k)
{
for(i = 0; i < len1; ++i)
for(j = 0; j < len2; ++j)
result[i + j] += r[i] * result1[j] ; //
for(i = 0; i < len1 + len2; ++i) //
{
if(result[i] > 9)
{
result[i + 1] += result[i] / 10 ;
result[i] %= 10 ;
}
}//
i = MAX - 1 ;
while (result[i] == 0)
--i ;
len2 = i + 1 ; //
for(j = 0; j < len2; ++j)
result1[j] = result[j] ; //
memset(result, 0, sizeof(result)) ; //
}
}
void Display(int point)
{
int i, len2, z ;
i = MAX - 1 ;
while(result1[i] == 0 && i >= 0)
--i ;
len2 = i ; //
if(len2 == -1)
{
cout<<"0"<<endl ;
return ;
}
if(point > len2 + 1)
{
cout<<"." ;
for(i = 0; i < point - len2 - 1; ++i)
cout<<"0" ;
}
i = 0 ;
while(result1[i] == 0 && i < point)
i++ ;
z = i ; //
for(i = len2; i >= z; --i)
{
if(i == point - 1)
cout<<"." ;
cout<<result1[i] ;
}
cout<<endl ;
}
int main()
{
int r[6] ; //
char R[7] ; //
int i, j, point, len, n ;
while (cin>>R>>n)
{
memset(result, 0, sizeof(result)) ;
memset(result1, 0, sizeof(result1)) ;
point = 0 ;
len = strlen(R) ;
for(i = 5, j = 0; i >= 0; --i)
{
if(R[i] == '.')
{
point = 5 - i ; //
len -= 1 ;
}
else
{
r[j] = R[i] - '0' ; //
result1[j] = R[i] - '0' ;
++j ;
}
}
//
Pow(n, result1, r, len) ; //
Display(point * n) ;
}
return 0 ;
}
这是代码,可是代码没解释,有没有人能帮我补充一下?理解一下?