Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

我凌乱了。过了discuss里面所有的测试数据。。为什么还是WA...

Posted by HUST_laz at 2011-10-25 00:47:41 on Problem 1001
#include <stdio.h>
#include <string.h>

//函数声明
int getdot(char str[]);
void clearleft(); 
long clearright();
void multi(char str[],int n);
void print(long len);
void cheng(long str1[],long str2[]);

char str1[1000];
long n,a1,dotlocal;
long s1[1000],s2[1000],c[1000];

int main()
{
  //定义变量
  
  while (scanf("%s %d",str1,&n)!=-1)
  {
    if (str1[strlen(str1)-1]=='.')
    str1[strlen(str1)-1]='\0'; 
    clearleft();
    dotlocal=getdot(str1);
	if (dotlocal!=0)
	{            
      long i=strlen(str1)-dotlocal-1;
	  a1=clearright();   
	  dotlocal-=a1;
	  if (dotlocal==0)
	  { 
         str1[strlen(str1)-1]='\0';
         if (strlen(str1)==0)
         {
            printf("0\n");
            continue;
          }
       }
      else 
      {
      for (;i<6;i++)
        str1[i]=str1[i+1];
      str1[i]='\0';
	  }
    }  
	//printf("%s",str1);
	//system("pause");
	dotlocal*=n;
	multi(str1,n);
	print(dotlocal);
  }
  return 0;
}


int getdot(char str[])                           //获得小数点的位置
{
  int i,len=strlen(str);
  for (i=0;i<len-1;i++)
  { 
     if (str[i]=='.')
     return (strlen(str)-i-1);
  }  
  return 0;
}

void clearleft()       				 //去除字符串左边的0
{
   int i,j;
   for (i=0;i<6;i++)
     if (str1[i]!='0') break;
   for (j=0;j<6;j++)
     str1[j]=str1[j+i];
} 

long clearright()						 //右边的0
{
  int len=strlen(str1);
  int len1=len;
  while (str1[len-1]=='0') 
  len--;
  str1[len]='\0';
  return len1-len;
}

void multi(char str[],int n)       
{
  long a[100],sum,i,j;
  for (i=0;i<=1000;i++)
  {
    s1[i]=0;
	s2[i]=0;
  }
  
  sum=-1;
  while (n>0) 
  {
    a[++sum]=n%2;
	n=n/2;
  }
  
  for (i=0;i<strlen(str);i++)
    s1[i+1]=str[strlen(str)-i-1]-48;
  s1[0]=strlen(str);
  
  //for (i=1;i<=strlen(str);i++)
  //printf("%d ",s1[i]);  
  //system("pause");  
  
  //str1:=str; @pascal
  if (a[0]==1)
  {
    int i=0;  
    for ( ;i<=s1[0];i++)
    s2[i]=s1[i];
  } else 
  {
    s2[0]=1;
    s2[1]=1;
  }
  
  for (i=1 ;i<=sum;i++)
  {
    cheng(s1,s1);
	s1[0]=c[0];
    for (j=1;j<=c[0];j++)
	s1[j]=c[j];
	
    if (a[i]==1)
    {
	cheng(s2,s1);
	s2[0]=c[0];
	for (j=1;j<=c[0];j++)
	s2[j]=c[j];
    }
  }
  
}

void cheng(long str1[],long str2[])
{
  int a[1000],b[1000],i,j; 
  a[0]=str1[0];b[0]=str2[0];
  for (i=1;i<=a[0];i++)
    a[i]=str1[i];
  for (i=1;i<=b[0];i++)
    b[i]=str2[i];
  for (i=1;i<=1000;i++) c[i]=0;  
  for (i=1;i<=a[0];i++)
    for (j=1;j<=b[0];j++)
  {
    c[i+j-1]+=a[i]*b[j];
	c[i+j]+=c[i+j-1]/10;
	c[i+j-1]%=10;
  }
  c[0]=a[0]+b[0];
  while ((c[c[0]]==0) && (c[0]>1))
  c[0]--;
}

void print(long len)
{
  int i=0;
  if (s2[0]>len)
  {
    for ( ;i<s2[0]-len;i++)
    printf("%c",s2[s2[0]-i]+48);
  } 
  if (dotlocal!=0) 
  printf(".");
  i=0;
  if (s2[0]<len)
  {
    for ( ;i<len-s2[0];i++)
    printf("0");
    len=s2[0];
  } 
  
  for (i=len;i>0;i--)
     printf("%c",s2[i]+48);
  printf("\n");
 // system("pause");
}


Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator