PAT乙级1024 科学计数法/甲级1073 Scientific Notation的疑惑

PAT乙级1024 科学计数法/甲级1073 Scientific Notation

题目链接:https://pintia.cn/problem-sets/994805260223102976/problems/994805297229447168

额,这道题有三个测试点一直通不过,自己的代码如下,试了蛮久也不知道什么情况没考虑到,球球大佬康康代码的问题,感激不尽。

我没有逐个字符输出,用了一个output数组来保存输出的内容,然后就出问题了QAQ

	
#include <cstdio>
#include <cstring>
int main() {
	char input[11000], output[11000] = {};
	int i, j, index;
	scanf("%s", input);
	if (input[0] == '-')printf("-");
 
	for (i = 0; input[i]; i++)if (input[i] == 'E')break;//此时i指向E
	sscanf(input + i + 1, "%d", &index);
	input[i] = 0;//E及后面的字符都删了
	strcpy(output, input + 1);//数据部分复制到ouput里,不含正负号
 
	if (index >= 0) {//指数为正,小数点右移
		for (i = 0, j = 1; i < index; i++, j++) {
			if (output[j + 1])output[j] = output[j + 1];
			else output[j] = '0';
		}//循环完j指向小数点位置
		if (output[j])output[j] = '.';//如果j指向空字符说明不需要小数点
	}
 
	else {//指数为负
		output[1] = output[0];
		output[0] = '.';
		for (i = (int)strlen(output) - 1 - index; output[i + index] != '.'; i--) {
			output[i] = output[i + index];
		}//output数组右移,前面的空位补0
		do {
			output[i] = '0';
		} while (i--);
		output[1] = '.';//第二个位置添一个小数点
	}
	printf("%s\n", output);
	return 0;
}

 

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 以帮助更多的人 ^-^