当前位置:编程学习 > C/C++ >>

C语言之科学技术法

50 科学记数法 对于非常大或者非常小的数据,我们通常用科学记数法来表示。例如在科技文献和电脑中经常遇到的 2.3×106 (计算机中的科学记数法表示为:2.3E6),或者 9.18×10-5 (科学记树法表示:9.18E-5)这种类型的数据。 输入: 用科学记数法表示的数据。即为符合C语言表示的科学记数法表示。 输出: 该数据的双精度表示 说明: 输入数据的精度不高于小数点后50位。 输入数据时,在实数和幂之间有空格进行分隔,空格个数不定。 结果保留到小数点后8位,如不足8位用0补足,超过8位则截断,不进行四舍五入的处理。 额,关于这个题,我想了一个很笨拙的办法,结果悲剧了......它根本不给我输出。请各位大神指点啊~ 由于我写的很乱,所以我加了一点自述,可能还是很乱,大家费心了。还请大家提些修改意见 谢谢各位! #include <stdio.h> #include <stdlib.h> #include <math.h> int main(int argc, char *argv[]) { char input[80];int work[2][80],i,j,point,p,t,k,amount; long q; /*input是输入时用的字符数组,我都给放到input里了*/ gets(input); /*work这个二维数组,第一维是整数部分,第二维是小数部分*/ for(i=0;i<80;i++) for(j=0;j<80;j++) work[j]=-1; k=0;p=1; for(i=0,t=0;input[t]!='\0';i++,t++) { if(input[t]==' ') i--; /*i是work里的记数器,t是input里的计数器*/ if(input[t]>='0'&&input[t]<='9') work[k]=input[t]-'0'; if(input[t]=='.') { i--;point=i; /*point是小数点的位置*/ } if(input[t]=='E'||input[t]=='e') { k=1;i=0; /*换到第二维,i归0*/ } if(input[t]=='-') { p=-1;i--; } } for(j=0;work[1][j]!=-1;j++); /*这句是测数组有效长度的*/ for(i=0;i<=j;i++) q+=work[1][j]*pow(10,j-i); /*懒懒地调用了一个库函数pow......*/ point+=p*q;i=point;amount=0; /*把小数点的位置挪一下*/ if(point<0) /*amount是记小数的输出次数的*/ { printf("0.");i++; /*分整数和小数分别输出*/ for(;i<0&&amount<8;i++) { printf("0"); amount++; } for(j=0;work[0][j++]!=-1&&amount<8;j++) { printf("%d",work[0][j]); amount++; } printf("\n"); } else { for(j=0;i>=0&&amount<8;i--,j++) printf("%d",work[0][j]); printf("."); for(;work[0][j++]!=-1&&amount<8;j++) {printf("%d",work[0][j]);amount++;} printf("\n"); } system("PAUSE"); return 0; }
追问:谢谢,可是我还是想知道我写的那里错了(除了脏乱差之外......)
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,