题目截图:
思路:
字符串处理。根据指数正负做不同处理。
代码:
/* 1024. 科学计数法 */ #include <stdio.h> #include <string.h> #include <math.h> #include <stdlib.h> #include <time.h> #define maxn 10010 char str[maxn]; // 存储输入值 int main() { // a为整数部分 // b为E位置,c为指数 int i, a, b, c=0, flag=1; scanf("%s", str); a = str[1]-'0'; // 查找 E 所在位置 for(i=3; i<strlen(str); ++i) { if(str[i]=='E') { b = i; break; } } i++; // 求指数 if(str[i]=='+') { flag=1; } else { flag = -1; } i++; for(; i<strlen(str); ++i) { c = c*10+(str[i]-'0'); } c = flag*c; if(str[0]=='-') { printf("-"); } if(c > 0) { // 若指数为正 printf("%d", a); int l = b-2; if(c>l) { // 去掉小数点,在后面加 0 for(i=3; i<b; ++i) { printf("%c", str[i]); } for(i=0;i<c-l+1; ++i) { printf("0"); } } else { // 小数点向右移 c 位 for(i=0; i<c; ++i) { printf("%c", str[3+i]); } printf("."); i+=3; for(; i<b; ++i) { printf("%c", str[i]); } } } else if(c < 0) { // 若指数为负 int l = -c-1; printf("0."); // 前面加 0. for(i=0; i<l; ++i) { // 小数点向左移 c 位 printf("0"); } printf("%d", a); for(i=3; i<b; ++i) { printf("%c", str[i]); } } else { // 若指数为 0 for(i=1; i<b; ++i) { printf("%c", str[i]); } } return 0; }
注:此代码有两个点没过,至今没找到原因。