PAT B1024或A1073 科学计数法 有空必须再做的

//提交了好几次,第一次是只对了一个点,回来用书提供的另外数据测试,4个错了3,发现了很多问题。第二次又有一个点是段错误,仔细看发现数组大小1010,应该10010
//这一题要注意数符号直接判断后输出,下面就不用考虑了。 
//注意0的情况先说完比较好
//想清楚第一个数不一定都是1。科学计数法小数点前有可能是1-9任何数 
//这一题可以全部输出,循环语句中写下如果是'.'则break,这样就省得计算从多少个开始了
//指数为正,向右移的情况都是我自己写的,没看书,通过测试了。鼓励一下,但是书上的方法更清晰简洁 
//这一题先把小数位左边输出时非常不好的! 
//书另外提供的测试数据,4个错了3。总结:认真读题;思考时要验证 
#include
#include
//#define LOCAL
char str[10010];//一开始写成了1010,其实人家数据是小于9999,对你无语! 
int main(){
	#ifdef LOCAL
	freopen("B1024data.in","r",stdin);
	freopen("B1024data.out","w",stdout);
	#endif
	gets(str);
	int len=strlen(str);
	int fx=1;//小数符号默认为0 
	int fz=1;//指数符号默认为1
	int ansz=0;
	//int pos=index();
	int pos=0;
	while(str[pos]!='E'){
		pos++;
	} 
	if(str[0]=='-') 
	//这里注意了,由于负数输出,正数不输出符号,因此这里判断了是负号后直接输出符号,下面就可以直接输数字不考虑符号了
	{
		fx=-1;
		printf("-"); 
	}
	 
	if(str[pos+1]=='-') fz=-1;
	
	//求指数,这里也是自己就想到的 
	for(int i=pos+2;i=sx){
			printf("%c",str[1]);//一开始写成这个,说到底还是题目没看清printf("1");
			for(int i=3;i

你可能感兴趣的:(PAT)