冪運算 編程訓練

給定兩個數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)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章