PAT (Basic Level) Practice (中文) 1024 科学计数法

 

题目链接

 

  1. 查询这个数是正还是负(开头是+还是-),-输出负号,+不做处理。
  2. 查询这个科学计数法是小数点前移还是后移(E后面的符号是+还是-)。
  3. 查询小数点移的位数,在根据是前移还是后移来设置这个数是正或者负,前移为负,后移为正。
  4. 开始输出数字:
    1. 若右移的位数大于现有的数位,说明不需要小数点,则只需将现有的数字输出,再补上右移后序的0。
    2. 若小数点不需要移动,则按照原数输出。
    3. 若小数点向左移动,则先输出一个 0. ,再补上小数点左移需补上的0,最后按需输出原有数字。
    4. 最后是小数点右移但未超过现有位数的情况,就是按序输出数字,在需要输出 . 的位置上输出点。

 

 

#include<stdio.h>
int main()
{
  char a[100000];
  int b,c,d=0;
  scanf("%s",a);
  if(a[0]=='-')
    printf("-");
  for(b=1;a[b]!='E';)
    b++;
	for(c=b+2;a[c]!='\0';c++)
	  d=d*10+a[c]-'0';
	if(a[b+1]=='-')
	  d=-d;
	if(d>=b-3){
	  printf("%c",a[1]);
	  for(c=3;c<b;c++)
	    printf("%c",a[c]);
	  for(c=1;c<=d-b+3;c++)
	    printf("0");
	}
	else if(d<=0){
	  if(d==0){
	    for(c=1;c<b;c++)
	      printf("%c",a[c]);
	  }
	  else{
	    printf("0.");
	    for(c=1;c<=-d-1;c++)
	      printf("0");
	    printf("%c",a[1]);
	    for(c=3;c<b;c++)
	      printf("%c",a[c]);
	  }
	}
	else{
	  for(c=1;c<b;c++){
	    if(c==2)
	      continue;
	    printf("%c",a[c]);
	    if(c==d+2)
	      printf(".");
	  }
	}
  return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值