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;
}
不知道你这个问题是否已经解决, 如果还没有解决的话: