大数的幂 POJ AC 比较粗糙

来源:互联网 发布:关闭 搜索合作网络 编辑:程序博客网 时间:2024/05/01 20:40
#include <stdio.h>


void bigDataAdd(char *tmpPointer, char *rsPointer,int k);
char floatPointer[256];
char rsPointer[256];
char outPointer[256];
char tmpPointer[256];
int main()
{
int n=0,tn=0; 
int moveN = 0;
while(scanf("%s%d",floatPointer,&n) == 2)
{
int indexA =0;
int flag = 1;
moveN =0;
while(floatPointer[indexA] != '\0')
{
if(floatPointer[indexA] != '.' && flag)
indexA++;
else
{
flag = 0;
floatPointer[indexA] = floatPointer[indexA+1];
indexA++;
moveN++;
}
}
strcpy(outPointer,floatPointer);
tn =n;
while(n > 1){
int length_a = strlen(floatPointer)-1;
int length_b = strlen(outPointer)-1;
int i=0,j=0,k=0;
for(i=length_a; i>=0; i--)
{
int carry = 0;
for(j=length_b; j>=0; j--)
{
int rs= (floatPointer[i] - '0')* (outPointer[j] - '0') + carry;
carry = rs/10;
rsPointer[j]=rs%10 + '0';
rsPointer[length_b+1] = '\0';
}
if(carry != 0)
{
int aK=0;
for(aK=length_b+1; aK >=1; aK--)
{
rsPointer[aK] = rsPointer[aK-1];
}
rsPointer[0] = carry + '0';
}
if(i == length_a)
{
strcpy(tmpPointer,rsPointer);
k=0;
}
else
{
k++;
bigDataAdd(tmpPointer,rsPointer,k);
}
// printf("%s\n",rsPointer);
}
strcpy(outPointer,tmpPointer);
n--;
int m =0;
while(tmpPointer[m]!='\0')
{
tmpPointer[m]='\0';
m++;
}
}
moveN = strlen(outPointer)-(moveN-1)*tn-1;
int index=strlen(outPointer);
while(index > moveN)
{
outPointer[index+1] = outPointer[index];
index--;
}
outPointer[index+1] = '.';

index =0;
int before =0;
while(outPointer[index]=='0')
{
before=0;
while(outPointer[before]!='\0')
{
outPointer[before] = outPointer[before+1];
before++;
}
}
while(outPointer[strlen(outPointer)-1] == '0')
{
outPointer[strlen(outPointer)-1] ='\0';
}
if(strlen(outPointer)==1)
{
if(outPointer[0] == '.')
outPointer[0] = '0';
}
if(outPointer[strlen(outPointer)-1] == '.')
outPointer[strlen(outPointer)-1] = '\0';
printf("%s\n",outPointer);
}
return 0;
}


void bigDataAdd(char *tmpPointer, char*rsPointer,int kn)
{
int l = strlen(rsPointer);
rsPointer[l+kn] = '\0';
while(kn>0){
rsPointer[l+kn-1] = '0';
kn--;
}
int i = strlen(tmpPointer);
l = strlen(rsPointer);
int z =0;
while(i>0)
{
int tmp = ((tmpPointer[i-1] -'0') + (rsPointer[l-1] - '0')+z);
rsPointer[l-1]= tmp%10+'0';
z= tmp/10;
i--;
l--;
}
if(z!=0)
{
if(l>0)
{
rsPointer[l-1] = rsPointer[l-1]+z;
}
else 
{
int bigK = strlen(rsPointer);
for(; bigK >=1; bigK--)
                        {
                                rsPointer[bigK] = rsPointer[bigK-1];
                        }
                        rsPointer[0] = z + '0';
}
}
strcpy(tmpPointer,rsPointer);
int m =0;
while(rsPointer[m]!='\0')
{
rsPointer[m]='\0';
m++;
}
}
0 0
原创粉丝点击