题意:首先浮点数部分必有1位小数,指数部分必为整数。其次要求保留所有有效位。
我将其拆分为2个字符串保存,左边的浮点数部分(去掉小数点)num,右边的指数部分exp。均包含符号。首先输出最前面的符号,为正不处理。n为exp的绝对值。然后根据指数的正负:若为负数,共计输出n个0。若为正数,区分为n>=valid_digit和n<valid_digit。前者无小数点,后者需要在适当的位置输出小数点。若为0,当然经过测试,测试数据中不含0指数,严谨起见还是加上,则原样输出。
//1024 科学计数法 (20分)
#include <cstdio>
char num[10000] = { 0 };
char exp[10000] = { 0 };
int main()
{int i, j;i = j = 0;char ch;while ((ch = getchar()) != 'E'){if (ch == '.') {continue;}num[i++] = ch;}while ((ch = getchar()) != '\n'){exp[j++] = ch;}if (num[0] == '-')//最前面的符号部分putchar('-');int valid_digit = i - 2;//小数部分的有效位数是i-2int n = 0;sscanf(exp+1, "%d", &n);//将exp字符串转化为正整数if (n) {if (exp[0] == '+') {if (n >= valid_digit) {//无小数点printf("%s", num + 1);int k = n - valid_digit;while (k--){putchar('0');}}else//有小数点{i = 1;while (num[i]){putchar(num[i]);if (i == n + 1)//在该位置输出小数点putchar('.');i++;}}}else if (exp[0] == '-') {printf("0.");n--;//输出n-1个0while (n--){putchar('0');}printf("%s", num + 1);}}else{printf("%c.%s", num[1], num + 2);}return 0;
}