题目:给定R和n,0.0 < R < 99.999,0 < n <= 25,计算Rn
输入:一系列R和n,每个R和n对占一行,R占6列,n占第8,9列
输出:对每个R和n对,输出对应的结果
代码:
#include<stdio.h>
#define N 150
char s[6];
char r[6];
char n;
char decimal = 0;
char result[N] = {0};
char temp[N] = {0};
void initArray(char* a, int n)
{
int i;
for(i=0; i<n; i++)
{
a[i] = 0;
}
}
void copy(char* src, char* dest, int start, int end)
{
int i;
for(i=start; i<=end; i++)
{
dest[i] = src[i];
}
}
int findLastIndex(char* a)
{
int i=N-1;
for(; i>=0 && a[i]==0; i--);
return i;
}
void adjust(char* a)
{
int i;
int c=0;
for(i=0; i<N; i++)
{
a[i] += c;
c = a[i]/10;
a[i] = a[i]%10;
}
}
void transformR()
{
decimal = 0;
char foundDec = 0;
int i,j;
initArray(r, 6);
//转换R
for(i=5,j=0; i>=0; i--)
{
if(s[i] != '.')
{
r[j++] = s[i]-'0';
if(!foundDec)
{
decimal++;
}
}
else if(s[i] == '.')
{
foundDec = 1;
}
}
if(!foundDec)
{
decimal = 0;
}
}
void printArr(char* a, int end, int start)
{
int i;
for(i=end; i>=start; i--)
{
printf("%d", a[i]);
}
}
void print(char* a)
{
int i;
int start,end;
end = findLastIndex(a);
decimal = decimal*n;
if(decimal==0)
{
printArr(a, end, 0);
printf("\n");
}
else
{
for(i=0; i<N && a[i]==0; i++);
start = i;
if(decimal <= start)
{
printArr(a, end, decimal);
printf("\n");
}
else if(decimal > start && decimal<=end)
{
printArr(a, end, decimal);
printf(".");
printArr(a, decimal-1, start);
printf("\n");
}
else
{
printf(".");
printArr(a, decimal-1, start);
printf("\n");
}
}
}
void compute()
{
int i,j,k;
int lastI;
initArray(temp, N);
initArray(result, N);
for(i=0; i<6; i++)
{
result[i] = r[i];
}
//计算
for(i=1; i<n; i++)
{
lastI = findLastIndex(result);
for(j=0; j<6; j++)
{
if(r[j] != 0)
{
for(k=0; k<=lastI; k++)
{
temp[j+k] += r[j]*result[k];
}
adjust(temp);
}
}
copy(temp, result, 0, N-1);
initArray(temp, N);
}
}
int main()
{
while(scanf("%s%d", s, &n) !=EOF)
{
transformR();
compute();
print(result);
}
return 0;
}