1024 科学计数法(C语言详解)
生活随笔
收集整理的這篇文章主要介紹了
1024 科学计数法(C语言详解)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前言
這個題目要考慮挺多小細節的(不過比起福爾摩斯那道還是hhh),我盡力了。。。
正文
題目
科學計數法是科學家用來表示很大或很小的數字的一種方便的方法,其滿足正則表達式 [±][1-9].[0-9]+E[±][0-9]+,即數字的整數部分只有 1 位,小數部分至少有 1 位,該數字及其指數部分的正負號即使對正數也必定明確給出。
現以科學計數法的格式給出實數 A,請編寫程序按普通數字表示法輸出 A,并保證所有有效位都被保留。
輸入格式:
每個輸入包含 1 個測試用例,即一個以科學計數法表示的實數 A。該數字的存儲長度不超過 9999 字節,且其指數的絕對值不超過 9999。輸出格式:
對每個測試用例,在一行中按普通數字表示法輸出 A,并保證所有有效位都被保留,包括末尾的 0。輸入樣例 1:
+1.23400E-03輸出樣例 1:
0.00123400輸入樣例 2:
-1.2E+10輸出樣例 2:
-12000000000代碼
#include <stdio.h> #include<string.h> #define MAX 1000 int main(){char s[MAX];int flag=1,num[MAX];//指數符號和數組 int i,len=0,exp=0; int j=0,n;int iBegin=0,iEnd=0;//指數位起點和終點scanf("%s",s);n=strlen(s);//字符串長度 if(s[0]=='-') //整數前的負號printf("-");//是符號就直接輸出for(i=1;s[i]!='E';i++){ if(s[i]!='.'){num[j++]=s[i]-'0';//存儲E前的數字進入數組 len++;//數組長度} }if(s[i+1]=='-'){// E后的符號,指數的正負 flag=-flag;} iBegin=i+2;//指數的第一位 iEnd=iBegin;for(iEnd;iEnd<n;iEnd++){exp=exp*10+(s[iEnd]-'0');//存放指數 }/*第一種情況如果指數是0*/if(exp==0){ for(j=0;j<len;j++)printf("%d",num[j]);//輸出數組 }/*第二種情況如果指數是負數*/if(flag==-1){printf("0.");while(exp-1){printf("0");exp--;}for(j=0;j<len;j++)printf("%d",num[j]);//輸出數組 } /*第三種情況如果指數是正數*/else if(flag==1){if(exp<len-1) //第三種情況里的第一種情況:如果指數小于數組{for(j=0;j<len;j++){printf("%d",num[j]);if(j==exp){printf(".");//輸出小數點 }}} else if(exp>=len-1){//第三種情況里的第二種情況:如果指數大于等于數組for(j=0;j<len;j++){printf("%d",num[j]);}while(exp-len+1){printf("0");exp--;}} } }總結
以上是生活随笔為你收集整理的1024 科学计数法(C语言详解)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java上传文件到MongoDB Gir
- 下一篇: Node.js+Koa开发微信公众号个人