| ||||||||||
| 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 | |||||||||
服了,测试例子过了,提交就是wrong answer#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: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator