Advertisement

hdu 4140 模拟

阅读量:
复制代码
 #include <stdio.h>

    
 #include <string.h>
    
 #define N 1000000
    
  
    
 char str[N];
    
 int x;
    
 int pow(int a,int b)
    
 {
    
     int res =  1;
    
     while(b--)
    
     res *= a;
    
     return res;
    
 }
    
 int solve()
    
 {
    
     int res = 0,add = 0,flag = 1,c,e;
    
     int i = 0,j = 0;
    
     int len = strlen(str);
    
     for(--len; str[len]!='+' && str[len] != '-' && len >= 0; --len);
    
     if(str[0] == '-')
    
     {
    
     flag = -1;
    
     i = 1;
    
     }
    
     for(;i < len; ++i)
    
     {
    
     c = 0;
    
     for(j = i; str[j] != 'X'; ++j)
    
         c = c*10 + str[j] - '0';
    
     if(i == j)
    
         c = 1;
    
     ++j;
    
     if(str[j] == '^')
    
     {
    
         e = 0;
    
         for(++j;str[j] != '+' && str[j] !='-';++j)
    
             e = e * 10 + str[j] - '0';
    
     }
    
     else
    
         e = 1;
    
  
    
     res += c* flag*pow(x,e);
    
     if(str[j] == '+')
    
         flag = 1;
    
     else
    
         flag = -1;
    
     i = j;
    
     }
    
     c = 0;
    
     for(j = i;str[j] && str[j] != 'X'; ++j)
    
     c = c * 10 + str[j] - '0';
    
  
    
     if(!str[j])
    
     res += c * flag;
    
     else
    
     {
    
     if(i == j)
    
         c = 1;
    
     ++j;
    
     if(!str[j])
    
         res += c * x * flag;
    
     else
    
     {
    
         ++ j;
    
         e = 0;
    
         for(;str[j];++j)
    
             e = e * 10 + str[j] - '0';
    
         res += c * flag * pow(x,e);
    
     }
    
     }
    
     return res;
    
 }
    
 int main()
    
 {
    
     int t,sp = 0;
    
     scanf("%d",&t);
    
     while(t--)
    
     {
    
     scanf("%d%s",&x,str);
    
     printf("Case #%d: %d\n",++sp, solve());
    
     }
    
     return 0;
    
 }
    
    
    
    
    代码解读

全部评论 (0)

还没有任何评论哟~