Exponentiation
#include <stdio.h> #include <stdlib.h> #include <memory.h> char srcR[7], srcn[3];//string length, +1 int dstR[5], dstn[2], point, n;//point记录小数点位置,n记录dstn的int形式; int ans[200], result[200]; int main() { while (1) { if (scanf("%s", srcR) == EOF) break; getchar(); scanf("%s", srcn); getchar(); point = -1; int i, j; for (i = 0; i < 5; i++) dstR[i] = -1; for (i = 0; i < 2; i++) dstn[i] = -1; for (i = 0; i < 200; i++) { ans[i] = 0; result[i] = 0; } for (i = 0; srcR[i] != '.' && i < strlen(srcR); i++); if (srcR[i] == '.') point = i; j = 0; int Rtail; int hasPoint = 0; for (i = 0; i < strlen(srcR); i++) if (srcR[i] != '.') dstR[j++] = srcR[i] - '0'; else hasPoint = 1; if (hasPoint && srcR[i-1] != '.') Rtail = i - 2;//记录R的结束,小数点占一位,循环多加了1,所以要减2 else if (hasPoint && srcR[i-1] == '.') Rtail = i - 3;//结尾是小数点,要在多减1; else//无小数点 Rtail = i - 1; j = 199; for (i = Rtail; i >= 0; i--) ans[j--] = dstR[i]; for (i = 0; i < strlen(srcn); i++) dstn[i] = srcn[i] - '0'; if (i == 2) n = dstn[0] * 10 + dstn[1]; if (i == 1) n = dstn[0]; int isZero = 1; for (i = 0; i < 6; i++) if (dstR[i] != 0 && dstR[i] != -1) isZero = 0; if (n == 0) { if (!isZero) printf("1\n"); continue; } if (isZero) { if (n != 0) printf("0\n"); continue; } //ans * dstR,dstR的每一位放在循环,ans放内循环 int k; for (k = 0; k < n - 1; k++) { for (j = Rtail; j >= 0 ; j--) { for (i = 199; i >= 1; i--) // i>=1; { result[i - (Rtail - j)] += ans[i] * dstR[j]; if (result[i - (Rtail - j)] >= 10) { result[i - (Rtail - j) - 1] += result[i - (Rtail - j)] / 10; result[i - (Rtail - j)] = result[i - (Rtail - j)] % 10; } } } for (i = 0; i < 200; i++) { ans[i] = result[i]; result[i] = 0;//不要忘了清零; } } if (hasPoint) { point = (strlen(srcR) - point - 1) * n; point = 200 - point; } int start = 0, end = 0; //循环,直到遇到非零或小数点 for (i = 0; i < 200; i++) if (ans[i] != 0) break; start = i; if (point < start && hasPoint) start = point - 1; if (hasPoint) { for (i = 199; i >= point; i--) if (ans[i] != 0) break; end = i; } else { end = 199; } if (ans[start] == 0 && point == start + 1) start++; for (i = start ; i <= end; i++) { if (i == point && hasPoint) printf("."); printf("%d", ans[i]); } printf("\n"); } return 0; }