欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

【PAT B1024】科学计数法(C语言)

发布时间:2023/12/10 编程问答 40 豆豆
生活随笔 收集整理的这篇文章主要介绍了 【PAT B1024】科学计数法(C语言) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

这一位大佬的代码很厉害
这是地址
要保留所有有效数字,若是正数,前面的正号不输出。

#include <stdio.h> #define MAX_A 10000 char A[MAX_A]; int pos_E; /* E的位置,也是数字A除了指数部分外的末尾 */ int e; /* 指数exponent */ char flag_E; /* 指数的正负 */ int read_A(); int read_cal_E(); int print_A(); int point_forward(); /* 小数点前移 */ int point_back(); /* 小数点后移 */ int print_m_n(int m, int n); int print_0(int x); /*************** 这个函数是读指数部分之前的部分 **************************/ /*************** 注意:小数点在数组A的第三个位置 **************************/ int read_A(){int c;for(pos_E = 0; (c = getchar()) != 'E'; ++pos_E)A[pos_E] = c;read_cal_E(); /* 读取指数部分并计算 */ } /********************************* 读入指数 ******************************/ int read_cal_E(){int i, j;int c = 0;int exp[4] = {0}; /* 指数绝对值不超过四位 */flag_E = getchar(); for(i = 0; (c = getchar()) != '\n'; ++i)exp[i] = c - '0';for(--i, j = 1; i >= 0; --i,j *= 10)e += j*exp[i];return 0; } /****************************** 输出A *************************************/ int print_A(){if(A[0] == '-')putchar(A[0]);if(flag_E == '-') /* 原小数点可能要前移 */point_forward();else /* 原小数点可能要后移 */point_back();return 0; } /***************************** 小数点可能前移 ************************************/ int point_forward(){if(e > 0 ){ /* 确实要前移 */printf("0.");print_0(--e); /* 输出e--个零 */printf("%c", A[1]); /* 再输出最后一个前移名额 */print_m_n(3, pos_E);/* 输出其余的数 */}else /* e==0 输出 */print_m_n(1, pos_E);return 0; } /***************************** 小数点可能后移 ************************************/ int point_back(){int i;if(e == 0)print_m_n(1, pos_E);else if(e > 0 && e < (pos_E - 3)){/* 小数点确实要后移 */printf("%c", A[1]); /* 它说保留所有有效位数字 */print_m_n(3, 3+e);printf(".");print_m_n(3+e, pos_E);}else if(e >= (pos_E - 3)){/* 没有小数点输出 */printf("%c", A[1]);print_m_n(3, pos_E);print_0(e - (pos_E - 3));} } /************************** 输出A的下标从m到n的数 *******************************/ int print_m_n(int m, int n){for(; m < n; ++m)printf("%c", A[m]);return 0; } /******************************* 输出x个零 *************************************/ int print_0(int x){for(; x > 0; --x)printf("0");return 0; } int main(){read_A(); /* 先将A的信息读进来 */print_A(); /* 输出A */return 0; }

总结

以上是生活随笔为你收集整理的【PAT B1024】科学计数法(C语言)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。