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

服了,测试例子过了,提交就是wrong answer

Posted by iphilip at 2009-09-19 12:05:07
#include <stdio.h>
#include <string.h>

#define BIG_NUM_LEN  1000

enum bool { true,false};

struct big_num {
	char str[BIG_NUM_LEN];
	int len;
	int pos;
};

void clear_big_num( struct big_num *b_n ) {
	int i;
	for( i=0;i<BIG_NUM_LEN;i++ ) {
		b_n->str[i]=0;
	}
	b_n->pos = 0;
	b_n->len = 0;
}

void print_big_num( struct big_num b_n ) {
	int i=0;
	//printf( "\nbig num%d-%d is:",b_n.len,b_n.pos );
	for( i=0; i<b_n.len;i++ ) {
		if( i==b_n.len-b_n.pos ) {printf( "." );}
		printf( "%c",b_n.str[i]+'0' );
	}
	printf( "\n" );
}

void str_to_big_num( char str[],struct big_num *b_n )  {
	unsigned int i=0;
	int p = 0;
	enum bool isP = false;
	clear_big_num(b_n);
	for( i=0;i<strlen(str);i++ ) {
		if( ((str[i]<'0' || str[i]>'9')&&str[i]!='.') )  {clear_big_num(b_n); return;}
		if(str[i]=='.' && isP==true) {clear_big_num(b_n); return;}
		if( str[i]=='.' && isP==false )  {isP=true;continue;}
		
		if( isP == false ) b_n->str[i]=str[i]-'0';
		else {
			b_n->str[i-1]=str[i]-'0';
			b_n->pos++;
		}
		b_n->len++;
	}
}

struct big_num big_num_by( struct big_num b_n1,struct big_num b_n2 ) {
	struct big_num sum;
	int i,j,k;
	clear_big_num( &sum );
	sum.pos = b_n1.pos+b_n2.pos;
	sum.len = b_n1.len+b_n2.len;
	for( i=b_n1.len-1;i>=0;i-- ) {
		for(j=b_n2.len-1;j>=0;j-- ) {
			sum.str[i+j+1] += b_n1.str[i]*b_n2.str[j];
		}
		for( k=sum.len-1;k>=0;k-- ) {
				if(  sum.str[k]>=10 ) {
					sum.str[k-1] += sum.str[k]/10;
					sum.str[k] = sum.str[k]%10;
				}
			//	printf( "$%c",sum.str[k]+'0' );
		}		
		//printf( "\n" );
	}
	
	for( k=sum.len-1;k>=0;k-- ) {
		if( sum.pos>0 && sum.str[k]==0 ) {sum.pos--;sum.len--;}
		if( sum.str[k]!=0 ) break;
	}
	
	//printf( "%d-%d",sum.len,sum.pos );
	for( k=0;k<sum.len-sum.pos;k++ ) {
		if( sum.str[k]!=0 ) break;
	}

	sum.len = sum.len-k;

	for( i=0;i<sum.len&&k>0;i++ ) {
		sum.str[i] = sum.str[i+k];
		sum.str[i+k] = 0;
	}


	return sum;
}

int main() {
	/*
	struct big_num b_n1,b_n2 ;
	struct big_num sum;
	str_to_big_num( "9.9999999999992",&b_n2 );
	str_to_big_num( "9.9999999999995",&b_n1 );
	sum = big_num_by( b_n1,b_n2 );
	print_big_num(sum);*/
	char str[BIG_NUM_LEN];
	int e_n=0;

	struct big_num b_n;
	struct big_num res;
	int i = 0;

	while( scanf("%s %d",str,&e_n ) != EOF ) {
		str_to_big_num( str,&b_n );
		str_to_big_num( str,&res );
		for( i=1; i<e_n;i++ ) {
			res = big_num_by( b_n,res );
		}
		print_big_num(res);
	}
	return 0;
}

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