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 |
Re:帮我看看我的程序,老是wrong answer,我确定没有错误啊,是不是格式有要求啊?In Reply To:帮我看看我的程序,老是wrong answer,我确定没有错误啊,是不是格式有要求啊? Posted by:chavez1986 at 2009-08-04 11:22:23 > /* > * main.c > * > * Created on: 2009-8-1 > * Author: chavez > */ > #include <stdio.h> > > #define MAX_LENGHT 5*25 > char szLine[6]; > int n; > int main() { > while(scanf("%s%d",szLine,&n)!=EOF){ > if(n == 0){ > printf("1\n"); > continue; > } > > > //szLine[6] = { '0' };//in > int result[MAX_LENGHT] = { 0 };//out > int a[5] = { 0 };//被乘数 > int b[MAX_LENGHT] = { 1, 0 };//乘数 > > int i, dflag = 0; > int dot = 0;//the position of dot > int j = 0; > int k, m; > int length = 0; > int start = 0; > int resultDotPosition; > > //judge 小数点后面有没有0 > > for (i = 0; i < 5; i++) { > if (szLine[i] == '.' && i != 5) > dflag = 1; > } > //deal with in > > for (i = 0; i <= 5; i++) { > if (dflag) { > if (szLine[5 - i] == '0') { > if (szLine[4 - i] != '0') > dflag = 0; > dot--; > continue; > } > } > > if (szLine[5 - i] != '.') { > a[j] = szLine[5 - i] - '0'; > j++; > } else { > dot += i; > } > > } > > for (k = 0; k < n; k++) { > for (i = 0; i < 5; i++) { > for (j = 0; j < MAX_LENGHT; j++) { > result[i + j] += a[i] * b[j]; > } > } > > for (i = 0; i < MAX_LENGHT; i++) { > if (result[i] >= 10) { > result[i + 1] += result[i] / 10; > result[i] %= 10; > } > } > if (k == n - 1) > break; > for (i = 0; i < MAX_LENGHT; i++) { > b[i] = result[i]; > result[i] = 0; > } > > } > > for (i = MAX_LENGHT - 1; i >= 0; i--) { > if (result[i]) { > length = i + 1; > break; > } > } > resultDotPosition = dot * n; > m = length - dot * n; > if (m < 0) { > printf("."); > for (j = -m; j > 0; j--) { > printf("0"); > } > > } > for (i = MAX_LENGHT - 1; i >= 0; i--) { > if (i == resultDotPosition - 1 && m >= 0) > printf("."); > if (start == 1) > printf("%d", result[i]); > else if (result[i]) { > printf("%d", result[i]); > start = 1; > } > > } > printf("\n"); > } > > return 0; > } > 不知道为什么,就是加了个不一定是6个数字的处理,修改如下: /* ============================================================================ Name : 1001-exponentiation.c Author : gsj Version : Copyright : Your copyright notice Description : Hello World in C, Ansi-style ============================================================================ */ #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_LENGHT 5*25 int main(void) { //input char szLine[6]; int n; //output int result[MAX_LENGHT]; //middle int a[5];//被乘数 int b[MAX_LENGHT];//乘数 while (scanf("%s%d", szLine, &n) != EOF) { //loop index int i, j, k; //flag int dflag = 0; int count = 0, dot = 0; int length, dotPosition, start,m; int sLength; //x^0 if (n == 0) { printf("1\n"); continue; } //initialization memset(result, 0, MAX_LENGHT * sizeof(int)); memset(b, 0, MAX_LENGHT * sizeof(int)); memset(a, 0, 5 * sizeof(int)); b[0] = 1; //szLine's length sLength = strlen(szLine); //判断有没有小数点 for (i = 0; i < sLength; i++) { if (szLine[i] == '.' && i != 5) dflag = 1; } //deal with input j = 0; for (i = 0; i <= 5; i++) { if (dflag) { if (szLine[sLength -1 - i] == '0') { if (szLine[sLength -2 - i] != '0') dflag = 0; dot--; continue; }else dflag = 0; } if (szLine[sLength -1 - i] != '.') { a[j] = szLine[sLength -1 - i] - '0'; count += a[j]; j++; } else dot += i; } //0^n(n!=1) if (count == 0) { printf("0\n"); continue; } //1^n if(count == 1 && a[0] == 1){ printf("1\n"); continue; } //multiply for (k = 0; k < n; k++) { for (i = 0; i < 5; i++) for (j = 0; j < MAX_LENGHT; j++) result[i + j] += a[i] * b[j]; for (i = 0; i < MAX_LENGHT; i++) { if (result[i] >= 10) { result[i + 1] += result[i] / 10; result[i] %= 10; } } if (k == n - 1) break; for (i = 0; i < MAX_LENGHT; i++) { b[i] = result[i]; result[i] = 0; } } //length length = 0; for (i = MAX_LENGHT - 1; i >= 0; i--) { if (result[i]) { length = i + 1; break; } } //dot's position dotPosition = dot * n; m = length - dot * n; if (m <= 0) { printf("."); for (j = -m; j > 0; j--) { printf("0"); } } start = 0; for (i = MAX_LENGHT - 1; i >= 0; i--) { if (i == dotPosition - 1 && m > 0) printf("."); if (start == 1) printf("%d", result[i]); else if (result[i]) { printf("%d", result[i]); start = 1; } } printf("\n"); } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator