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 |
finnaly,有代码有真相弄了一整天终于看到了accept,差点放弃了 #include <stdio.h> #include <string.h> #define LEN 250 #define COU 6 int getSize(double, int*); void getResult(int, int, int, int*); int a2f(char*, int*, int); int main() { int n, size = 0; int result[LEN]; int tmp = 0; char a[COU+1]; double ret ; int exp = 1; int i; while(scanf("%s %d", a, &n) == 2) { if(n == 0) { printf("1\n"); continue; } memset(result, 0, sizeof(int)*LEN); tmp = a2f(a, &size, COU); // printf("tmp = %d, size = %d\n", tmp, size); if(tmp == 0) { printf(".\n"); continue; } getResult(tmp, n, size, result); } return 0; } int getSize(double r, int* tmp) { int count = 0; while((int)r != r) { count++; r *= 10; } *tmp = (int)r; return count; } void getResult(int tmp, int p, int size, int* result) { int p_size = p*size; int arr_size = 1; int i; int carry = 0; result[0] = 1; while(p > 0) { for(i = 0; i < arr_size; i++) { result[i] = result[i] * tmp; } for(i = 0; i < arr_size; i++) { result[i] += carry; if(result[i] >= 10) { carry = result[i] / 10; result[i] = result[i]%10; } else { carry = 0; } } while(carry >= 10) { result[arr_size++] = carry%10; carry = carry/10; } if(carry > 0) { result[arr_size++] = carry; carry = 0; } p--; } if(p_size >= arr_size) { printf("."); while(p_size > 0) { printf("%d", result[p_size-1]); p_size--; } printf("\n"); } else { while(arr_size > 0) { if(arr_size == p_size) printf("."); printf("%d", result[arr_size-1]); arr_size--; } printf("\n"); } } int a2f(char* a, int* count, int len) { int i = 0, j = 0; int _int = 0, _flo = 0; int exp = 1; int result = 0; for(i = 0; i < len; i++) { if(a[i] == '.') break; } *count = len - i -1; // if(*count < 0) // { // *count = len; // i = -1; // } for(j = 0; j < i; j++) { _int = (a[j] - '0') + _int*10; } for(j = i+1; j < len; j++) { _flo = (a[j] - '0') + _flo*10; exp *= 10; } result = _int*exp + _flo; if(result == 0) return 0; while((*count > 0) && (result%10 == 0)) { result = result/10; *count = *count-1; } return result; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator