1024. 科学计数法(两点未通过)
题目截图:
思路:
字符串处理。根据指数正负做不同处理。
代码:
/* 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; }
注:此代码有两个点没过,至今没找到原因。
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步