1024. 科学计数法(两点未通过)
Posted Just_for_Myself
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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; }
注:此代码有两个点没过,至今没找到原因。
以上是关于1024. 科学计数法(两点未通过)的主要内容,如果未能解决你的问题,请参考以下文章