给定两个数R和n,输出R的n次方,其中0.0<R<99.999, 0<n<=25
C语言:
1 #include <stdio.h>
2 #include <string.h>
3
4 int len;
5 int product[126] = {0};
6
7 void multiply(int a[], int n)
8 {
9 int i;
10 int carry =0;
11 for(i=0; i<len; i++) {
12 int temp = a[i]*n + carry;
13 a[i] = temp %10;
14 carry = temp /10;
15 }
16 while(carry) {
17 a[i++] = carry % 10;
18 carry /= 10;
19 }
20 len = i;
21 }
22
23 int main(int argc, char* argv[])
24 {
25 int n;
26 char s[6];
27 while(scanf("%s %d", s, &n) != EOF) {
28 int position = 0, i = 0, num = 0, j = 0;
29 for(i=0; i<strlen(s); i++) {
30 if(s[i] == '.') {
31 position = (strlen(s) -1 -i) * n;
32 } else {
33 num = num*10 + s[i] -48;
34 }
35 }
36 product[0] = 1;
37 len = 1;
38 for(i=0; i<n; i++) {
39 multiply(product, num);
40 }
41
42 if(len <= position) {
43 printf(".");
44 for(i=0; i<position-len; i++){
45 printf("0");
46 }
47
48 j =0;
49 for(i=len-1; i>=j; i--) {
50 printf("%d", product[i]);
51 }
52 } else {
53 j = 0;
54 while (product[j] == 0 && j < position) {
55 j++;
56 }
57 for(i=len-1; i>=j; i--) {
58 if (i+1 == position) {
59 printf(".");
60 }
61 printf("%d", product[i]);
62 }
63 }
64 printf("\n");
65 }
66
67 }
Python:
1 import re
2 def float_format(result_int, decimal_number):
3 result_str = str(result_int)
4 if len(result_str) <= decimal_number:
5 result = '%0{}d'.format(decimal_number) %result_int
6 result = '0.' + result
7 else:
8 left_result = result_str[:-decimal_number]
9 right_result = result_str[-decimal_number:]
10 result = '.'.join([left_result, right_result])
11 return result.rstrip('0').rstrip('.')
12
13 a = input()
14 row_list = a.split('\n')
15 for row in row_list:
16 a = re.split('\s+', row)[0]
17 b = re.split('\s+', row)[1]
18 str_len = len(a)
19 point_pos = a.find('.')
20 decimal_number = str_len - 1 -point_pos
21 a_int = int(a.replace('.', ''))
22 b_int = int(b)
23 result_int = a_int ** b_int
24 result = float_format(result_int, decimal_number * int(b))
25 print(result)