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 }