日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

科学计数法(PAT)

發(fā)布時間:2023/12/16 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 科学计数法(PAT) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1.題目描述:

科學計數(shù)法是科學家用來表示很大或很小的數(shù)字的一種方便的方法,其滿足正則表達式[±][1-9]"."[0-9]+E[±][0-9]+,即數(shù)字的整數(shù)部分只有1位,小數(shù)部分至少有1位,該數(shù)字及其指數(shù)部分的正負號即使對正數(shù)也必定明確給出。

現(xiàn)以科學計數(shù)法的格式給出實數(shù)A,請編寫程序按普通數(shù)字表示法輸出A,并保證所有有效位都被保留。

2.輸入描述:

每個輸入包含1個測試用例,即一個以科學計數(shù)法表示的實數(shù)A。該數(shù)字的存儲長度不超過9999字節(jié),且其指數(shù)的絕對值不超過9999。

3.輸出描述:

對每個測試用例,在一行中按普通數(shù)字表示法輸出A,并保證所有有效位都被保留,包括末尾的0。

4.輸入例子:

+1.23400E-03

5.輸出例子:

0.00123400

6.解題思路:

本來打算用字符串輸入,用double類型的變量進行計算以普通數(shù)字輸出,但最后發(fā)現(xiàn)關于double類型的變量無法動態(tài)控制輸出小數(shù)點后的位數(shù)以及多余零的個數(shù),同時double的范圍也不夠支撐大數(shù)據(jù)的輸出,所以只能想到通過字符串輸出來解題。

1. 創(chuàng)建兩個足夠的大的數(shù)組,一個str[N]用于輸入科學計數(shù)法的格式,另一個com[N]用于輸出轉換后的普通數(shù)字表示;

2. 首先我們要把輸入的科學計數(shù)法中字母E之前的字符依次賦值給com[N],對于正數(shù)我們要去掉字符’+’,對于負數(shù)則將E之前都賦值給com[N];

3. 然后判斷str[N]中字母E后面的字符時正號’+‘還是負號’-’,在此間記錄str[N]的長度和字母E后[+ -]字符的位置,通過計算其長度來獲取10的E次方E的數(shù)值;

4. 最后對E的正負號分別判斷,如果是正號’+’,則通過移動數(shù)組中小數(shù)點位置和添加數(shù)據(jù)0操作來進行轉換,如果是負號’-’,則可通過整體向后移動,在小數(shù)點后添加數(shù)據(jù)0元素來進行操作。

7.源代碼:

#include<stdio.h> #include<math.h> #define N 10000 int main() {int i,j,k,n=0;double m=0,E=0;char c,str[N]="\0",com[N]="\0";//步驟1scanf("%s",str);for(i=0;str[i]!='\0';i++)//步驟2{if(str[i]=='E'){j=i+1;break;}elseif(str[0]=='+'&&str[i+1]!='E')com[i]=str[i+1];elseif(str[0]=='-'&&str[i]!='E')com[i]=str[i];}while(str[i]!='\0')//步驟3{i++;}for(k=i-1;k>j;k--)//步驟3E+=(str[k]-48)*(pow(10,n++));m=E;if(str[j]=='+')//步驟4{for(k=1;k<m+2;k++)if(com[k]=='.'&&com[k+1]!='\0'&&E!=0){c=com[k];com[k]=com[k+1];com[k+1]=c;E--; }elseif(com[k]=='.'&&com[k+1]=='\0'&&E!=0){com[k]='0';E--;}elseif(com[k]=='\0'&&E!=0){com[k]='0';E--;}}elseif(str[j]=='-'&&E!=0){for(k=0;k<3;k++)if(com[k]=='.'){c=com[k-1];com[k-1]=com[k];com[k]=c;break;}for(k=j-1;com[k]!='.';k--)com[k]=com[k-1];com[k]='0';E--;while(E!=0){for(k=j;com[k-1]!='.';k--)com[k]=com[k-1];com[k]='0';j++;E--;}}printf("%s",com);return 0; }

總結

以上是生活随笔為你收集整理的科学计数法(PAT)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。