题意:
输入一个科学计数法表示的字符串,输出普通表示。
思路:
第一个符号标记一下,读入数字的主体(不带小数点),从字符'E'截断,标记一下第二个符号,然后用整型读入位数。
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
const int MAX_N = 100000;
char s[MAX_N];
int len;
char ma[MAX_N]; int malen = 0;
bool flag1, flag2;
int nxt = 0;
int main() {
// freopen("in.txt", "r", stdin);
// freopen("out.txt", "w", stdout);
scanf("%s", s); len = strlen(s);
if (s[0] == '-') flag1 = false;
else flag1 = true;
int p = 0;
malen = 0;
for (int i = 1; i < len; i++) {
if (s[i] == 'E') {
p = i; break;
}
if (s[i] == '.') continue;
ma[malen++] = s[i];
}
ma[malen] = '\0'; p++;
if (s[p] == '-') flag2 = false;
else flag2 = true; p++;
sscanf(s + p, "%d", &nxt);
// printf("%c", (flag1 ? '+' : '-'));
if (!flag1) printf("-");
if (flag2) {
if (nxt < malen-1) {
for (int i = 0; i < malen; i++) {
printf("%c", ma[i]);
if (i == nxt) printf(".");
}
} else if (nxt == malen-1) {
printf("%s", ma);
} else {
printf("%s", ma);
int t = nxt - malen + 1;
for (int i = 0; i < t; i++) {
printf("0");
}
}
printf("\n");
} else {
if (nxt == 0) {
printf("%c", ma[0]);
printf(".");
for (int i = 1; i < malen; i++) printf("%c", ma[i]);
} else {
for (int i = 0; i < nxt; i++) {
printf("0");
if (i == 0) printf(".");
}
printf("%s", ma);
}
printf("\n");
}
return 0;
}