[C] uva 748 →→→→→进入此内容的聊天室

来自 , 2020-12-06, 写在 C, 查看 140 次.
URL http://www.code666.cn/view/d0921d44
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. #define MAXN 1000
  6.  
  7. int ans[MAXN], result[MAXN], Baselen;
  8. int Mul(int base[], int len);
  9.  
  10. int main()
  11. {
  12.     int i, j;
  13.     int n = 0, pos, c, len, count, base[6];
  14.     char R[6];
  15.  
  16.     memset(R, '0', sizeof(R));
  17.     memset(result, 0, sizeof(result));
  18.     memset(base, 0, sizeof(base));
  19.  
  20.     while (scanf("%s%d", R, &n)==2)
  21.     {
  22.         Baselen = strlen(R);
  23.         pos = 0;
  24.         c = 0;
  25.         len = 0;
  26.         count = 0;
  27.         memset(result, 0, sizeof(result));
  28.         for (i=Baselen-1; i>=0; i--)
  29.         {
  30.             if (R[i]) break;
  31.         }
  32.         Baselen = i;
  33.         for (i=0; i<Baselen+1; i++)
  34.         {
  35.             if (R[i] != '.') result[c++] = R[i]-'0';
  36.             else pos = Baselen-i;
  37.         }
  38.         memcpy(base, result, sizeof(base));
  39.         len = Baselen;
  40.         for (i=1; i<n; i++)
  41.         {
  42.             if (n==1) break;
  43.             len = Mul(base, len);
  44.         }
  45.         pos = n*pos;
  46.         i = 0;
  47.         while (result[i]==0&&i<len-pos) i++;
  48.         count = i;
  49.         for (i=MAXN-1; i>=0; i--) if (result[i]) break;
  50.         j = i;
  51.         for (i=count; i<=j; i++)
  52.         {
  53.             if (i ==len-pos) printf(".");
  54.             printf("%d", result[i]);
  55.         }
  56.         printf("\n");
  57.     }
  58.     return 0;
  59. }
  60.  
  61. int Mul(int base[], int len)
  62. {
  63.     memset(ans, 0, sizeof(ans));
  64.     int c = 0, k = 0;
  65.     int i, j;
  66.     for (i=Baselen-1; i>=0; i--)
  67.     {
  68.         for (j=len-1, c=Baselen-1-i; j>=0; j--)
  69.         {
  70.             ans[c++] += base[i]*result[j];
  71.         }
  72.     }
  73.     for (i=0; i<MAXN-1; i++)
  74.     {
  75.         ans[i+1] += ans[i]/10;
  76.         ans[i] %= 10;
  77.     }
  78.     for (i=MAXN-1; i>=0; i--)
  79.     {
  80.         if (ans[i]||i == c) break;
  81.     }
  82.     for ( ; i>=0; i--)result[k++] = ans[i];
  83.     return c+1;
  84. }
  85.  

回复 "uva 748"

这儿你可以回复上面这条便签

captcha