| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
我已经头晕分不清方向了经过好几组测试数据,都没有问题,大家都我看看,用你们的测试数据测试一下,谢谢了
#include <stdio.h>
#include <string.h>
int MaxLen ;
int Len1;
int IsDec;
void Reserve(char *R)
{
char t;
int i,j;
i = 0;
j = strlen(R) - 1;
while(i<j)
{
t = R[i];
R[i] = R[j];
R[j] = t;
i++;
j--;
}
}
void Multiply(char R[][160])
{
int i = 0,j = 0;
int n = 0;
char inc = 0;
int sum = 0;
for(i = 0;i < Len1;i++)
for(j = 0;j < MaxLen;j++)
{
R[i+1][j+i] = R[0][i]*R[6][j];
}
MaxLen += Len1 -1;
n = MaxLen;
inc = 0;
for(j=0;j<=n;j++)
{
sum = 0;
for(i=1;i <= Len1;i++)
{
sum += R[i][j];
}
sum += inc;
inc = sum/10;
R[6][j] = sum % 10;
}
if(R[6][j-1]) MaxLen++;
}
void trim(char *R)
{
int i = 0,j = strlen(R)-1;
int k;
char Buff[6];
memset(Buff,0,sizeof(Buff));
while(R[i] == '0') i++;
while(R[j] == '0') j--;
k = 0;
for(;i!=j+1;i++)
Buff[k++] = R[i];
Buff[k] = 0;
memcpy(R,Buff,sizeof(Buff));
}
void Process(char R[][160],int *Dec,int n)
{
int i = 0;
int j = 0;
int Len;
int withdec = 0;
int size = 0;
*Dec = 0;
trim(R[0]);
Len = strlen(R[0]);
for(i = 0;i < Len;i++)
if(R[0][i] == '.')
{
break;
withdec = 1;
}
*Dec =Len - i - 1;/*Get decimal*/
Len -= 1;
for(i = Len - *Dec ;i < Len+1;i++)
R[0][i] = R[0][i+1];/*shift left*/
R[0][i] = 0;
*Dec = *Dec*n;
Reserve(R[0]);
MaxLen = Len;
Len1 = Len;
for(i = 0 ;i < Len;i++)/*copy*/
{
R[0][i] -= '0';
R[6][i] = R[0][i];
}
for(i = 1;i < n;i++)
{
Multiply(R);
for(j = 1;j <= 5;j++)/*clear memory*/
memset(R[j],0,sizeof(R[j]));
}
}
void Print(char R[][160],int Dec,int n)
{
int i ;
if(n == 1)
{
trim(R[0]);
printf("%s\n",R[0]);
}
else if(IsDec)
{
i = Dec;
if(i > MaxLen - 1)
{
printf(".");
for(;i > MaxLen;i--) printf("0");
}
for(i = MaxLen - 1;i >=0;i--)
{
if(i == Dec -1) {
printf(".");
printf("%c",R[6][i]+'0');
}
else printf("%c",R[6][i]+'0');
}
printf("\n");
}else
{
for(i=MaxLen -1;i >=0;i--)
printf("%c",R[6][i]+'0');
printf("\n");
}
}
int HaveDec(char R[])
{
int i;
for(i=0;i <6;i++)
if(R[i] == '.') return 1;
return 0;
}
void ProcessInt(char R[][160],int n)
{
int Len;
int i = 0,j = strlen(R[0])-1;
int k;
char Buff[6];
memset(Buff,0,sizeof(Buff));
while(R[0][i] == '0') i++;
k = 0;
for(;i!=j+1;i++)
Buff[k++] = R[0][i];
Buff[k] = 0;
memcpy(R,Buff,sizeof(Buff));
Reserve(R[0]);
Len = strlen(R[0]);
MaxLen = Len;
Len1 = Len;
for(i = 0 ;i < Len;i++)/*copy*/
{
R[0][i] -= '0';
R[6][i] = R[0][i];
}
for(i = 1;i < n;i++)
{
Multiply(R);
for(j = 1;j <= 5;j++)/*clear memory*/
memset(R[j],0,sizeof(R[j]));
}
}
int main()
{
char R[7][160];
int n;
int i;
int Dec;
for(i=0;i<7;i++)
memset(R[i],0,sizeof(R[i]));
while(scanf("%s%d",R[0],&n) != EOF)
{
IsDec = 1;
Dec = 0;
if(n != 1)
{ if(HaveDec(R[0]))
{
IsDec = 1;
Process(R,&Dec,n);
}
else ProcessInt(R,n);
}
Print(R,Dec,n);
for(i=0;i<7;i++)
memset(R[i],0,sizeof(R[i]));
}
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator