c语言科学计数法输出1_e10,PAT 1024科学计数法的代码实现及错误分析(C语言)
題目
科學計數法是科學家用來表示很大或很小的數字的一種方便的方法,其滿足正則表達式[+-][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
實現思路:用字符數組存儲數據,對關鍵位置進行分類分析。
1.定義足夠長字符數組,存儲輸入數據,計算指數大小
2.第一位的負號原樣輸出,其余區分指數位為負,為0或者正數兩種情況進行分類輸出。
代碼如下:
#includeint main()
{
char a[10002]={0};
fgets(a,10002,stdin);//指定最多輸入位數的安全輸入
int iBegin=0,iEnd=0;//指數位起點和終點,包含符號位
for(int i=0;i<20002;i++)
{
if(a[i]=='E')
{
iBegin=i+1;
}
if(a[i]=='\n')
{
iEnd=i-1;
break;
}
}
int iE=0,iCnt=1,iWei=0;
//計算指數iE
for(int i=iEnd;i>iBegin;i--)
{
iE+=(a[i]-'0')*iCnt;
iCnt*=10;
}
if(a[0]=='-')
{
printf("-");
}
//指數為負時輸出
if(a[iBegin]=='-'&&iE!=0)
{
//前面添加指數個0
printf("0.");
for(int j=0;j
錯誤分析:
測試點2和3始終通不過,后經仔細檢查,發現在指數為正時判斷小數點輸出存在錯誤,即有可能在指數剛好將前面小數變為整數的時候,還在最后數字之后輸出小數點的問題,加上限制條件iWei
總結
以上是生活随笔為你收集整理的c语言科学计数法输出1_e10,PAT 1024科学计数法的代码实现及错误分析(C语言)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matlab支持向量机程序代做
- 下一篇: Node.js Web 开发框架大全《中