生活随笔
收集整理的这篇文章主要介绍了
【PAT B1024】科学计数法(C语言)
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
这一位大佬的代码很厉害
这是地址
要保留所有有效数字,若是正数,前面的正号不输出。
#include <stdio.h>
#define MAX_A 10000
char A
[MAX_A
];
int pos_E
;
int e
;
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
);
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;
}
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
); printf("%c", A
[1]); print_m_n(3, pos_E
);}else 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));}
}
int print_m_n(int m
, int n
){for(; m
< n
; ++m
)printf("%c", A
[m
]);return 0;
}
int print_0(int x
){for(; x
> 0; --x
)printf("0");return 0;
}
int main(){read_A(); print_A(); return 0;
}
总结
以上是生活随笔为你收集整理的【PAT B1024】科学计数法(C语言)的全部内容,希望文章能够帮你解决所遇到的问题。
如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。