PAT Basic Level 1024

AC代码

  1 #include <stdio.h>
  2 #include <string.h>
  3 int main ()
  4 {
  5     char input[20000];
  6     scanf("%s",&input);
  7     char ret[20000];
  8     char dotmove[5] = {'0','0','0','0','0'};
  9     int i = 0;
 10     int size = 0;
 11     size = strlen(input);
 12     int eposition = 0;       //记录E位置 
 13     for(i = 0;i < size;i++ )  //找到输入中的E 
 14     {
 15         if(input[i] == 'E')
 16         {
 17             break;
 18         }
 19     }
 20     eposition = i;
 21     i++;
 22     int j = 0 ; //指向dotmove 
 23     int mask =1;
 24     while(i < size)
 25     {
 26         dotmove[j] = input[i];
 27         i++;
 28         j++;
 29         mask = mask * 10; 
 30      }
 31      mask = mask / 100;    //因为不包括前面的+-号 
 32      int move = 0;
 33      j = 1;               //dotmove[0]记录了指数的正负号 
 34      while(mask != 0)
 35      {
 36          move = move + mask * (dotmove[j] - '0');
 37          j++;
 38          mask = mask / 10;
 39     }
 40     if(input[0] == '-')
 41     {
 42         printf("-");
 43      } 
 44      if(dotmove[0] == '-')       //情况1 小数点向前移 
 45      {
 46          printf("0.");
 47          move--;
 48         while(move != 0)
 49         {
 50             printf("0");
 51             move--;
 52          } 
 53         for(i = 0;i < eposition;i++)
 54         {
 55             if(input[i] != '+'&&input[i] != '-'&&input[i] != '.')
 56             {
 57                 printf("%c",input[i]);
 58             }
 59         }
 60      }
 61      int flag = 1;           //用于控制清除前导0 ,当为1时警告不输入 
 62      if(dotmove[0] == '+')       //情况2 小数点后移 
 63      {
 64          if(input[1] != '0')          //如果第一个不是0,直接清除警告 
 65          {
 66              flag = 0;
 67          }
 68         if(flag != 1)
 69          printf("%c",input[1]);    //先输出小数点前那个数字 
 70          for(i = 3;i < eposition;i++)
 71         {
 72             if(input[i] != '0')
 73             {
 74                 flag = 0;
 75             }
 76             if(input[i] != '+'&&input[i] != '-'&&input[i] != '.'&&flag != 1)   
 77             {
 78                 printf("%c",input[i]);
 79                 move--;
 80             }
 81             if(move == 0)
 82             {
 83                 if(flag == 1)
 84                 {
 85                     printf("0.");
 86                     flag = 0;
 87                     move--;
 88                 }
 89                 else
 90                 {
 91                     if( i != eposition - 1)
 92                     printf(".");
 93                     move--;
 94                 } 
 95             }
 96             
 97         }
 98         while(move > 0)
 99         {
100             printf("0");
101             move--;
102         }
103      }
104     
105     return 0 ;
106  } 

 

posted @ 2016-10-19 11:15  Ponytai1  阅读(176)  评论(0编辑  收藏  举报