科学计数法 (C语言)
作者:互联网
对于非常大或者非常小的数据,我们通常用科学记数法来表示。例如在科技文献和电脑中经常遇到的 2.3×106 (计算机中的科学记数法表示为:2.3E6),或者 9.18×10-5 (科学记树法表示:9.18E-5)这种类型的数据。
输入:
用科学记数法表示的数据。即为符合C语言表示的科学记数法表示。
输出:
该数据的双精度表示
说明:
输入数据的精度不高于小数点后50位。
输入数据时,在实数和幂之间有空格进行分隔,空格个数不定。
结果保留到小数点后8位,如不足8位用0补足,超过8位则截断,不进行四舍五入的处理。
#include <stdio.h>
#include<math.h>
int main(){
int arr[100];int flen=0,blen=0,i=0,j=0,k=1,ci=0,e=1;char cc;
for(i=0;i<100;i++){//initialize
arr[i]=0;
}
i=0;
do{//输入小数点前的部分
cc=getchar();
ci=cc;
if((ci>=48)&&(ci<=57)){//判断为数字则存入数组
arr[i]=ci-48;i++;
flen++;//记录整数的位数
}
if(cc=='.'){//检测到小数点
break;
}
if(cc==' '){//检测到空格
break;
}
} while(1);
i=flen;
if('.'==cc){ //上个循环于小数点处结束,输入小数部分
do{
cc=getchar();
ci=cc;
if((ci>=48)&&(ci<=57)){//判断为数字,输入
arr[i++]=ci-48;
blen++;//记录小数的位数
}
if(cc==' '){//检测到空格,小数输入结束
break;
}
} while(1);
}
//end numbers input
do{
cc=getchar();
if((cc='e')||(cc='E')){
scanf(" %d",&e);
break;
}
}while(1);//Nothing wrong above
//printf("%d\n%d\n%d\n",flen,blen,e);
if(e>0){
for(j=0;j<flen+e;j++){
printf("%d",arr[j]);
}
printf(".");
for(k=flen+e;k<flen+e+8;k++){
printf("%d",arr[k]);
}
printf("\n");
return 0;
}
if(e==0){
for(j=0;j<flen;j++){
printf("%d",arr[j]);
}
printf(".");
for(k=flen;k<flen+8;k++){
printf("%d",arr[k]);
}
printf("\n");
return 0;
}
if(e<0){//power is nagetive
e=0-e;
if(e>=flen){//左移超出整数位数
printf("0.");
if((e-flen)<=8){
for(j=1;j<=e-flen;j++){
printf("0");
}}else{
for(j=1;j<=8;j++){
printf("0");}
}
for(k=0;k<=(7-e+flen);k++){
printf("%d",arr[k]);
}
printf("\n");
}else{//左移不超过整数位数
for(i=0;i<(flen-e);i++){
printf("%d",arr[i]);
}
printf(".");
for(i=flen-e;i<(flen-e+8);i++){
printf("%d",arr[i]);
}
printf("\n"); return 0;
}
}
}
标签:表示,int,科学,C语言,记数法,flen,计数法,数据 来源: https://blog.csdn.net/weixin_46065720/article/details/121182713