PAT甲级1073 Scientific Notation:[C++题解]字符串处理、科学计数法
生活随笔
收集整理的這篇文章主要介紹了
PAT甲级1073 Scientific Notation:[C++题解]字符串处理、科学计数法
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
文章目錄
- 題目分析
- 題目鏈接
題目分析
來源:acwing
分析:字符串處理。
思路:
- 把底數(shù)部分摳出來(用a表示);指數(shù)部分變成int型(用b表示)(指數(shù)部分代表小數(shù)點往哪移動,并且移動幾位),比如 +1.233E102=123.3+1.233E10^2=123.3+1.233E102=123.3這里的指數(shù)是2,代表小數(shù)點往后移動2位。再比如1.2003E10?2=0.0120031.2003E10^{-2}=0.0120031.2003E10?2=0.012003這里的指數(shù)是-2,代表小數(shù)點往前移動2位。
- 底數(shù)部分去掉小數(shù)點,指數(shù)部分+1。比如 +1.233E102=123.3+1.233E10^2=123.3+1.233E102=123.3中底數(shù)a變成1233,含義是小數(shù)點放在最前面,等價于0.1233,這樣的話,指數(shù)就要+1,從原來的2變成3.再比如1.2003E10?2=0.0120031.2003E10^{-2}=0.0120031.2003E10?2=0.012003中底數(shù)a變成 12003,指數(shù)變成-1.
- b的正負(fù)代表移動方向,b的大小代表移動位數(shù)。具體例子見代碼注釋。
ac代碼
#include<bits/stdc++.h> using namespace std;int main(){string s;cin >> s;if(s[0] == '-') cout<<"-";int k = s.find("E");//底數(shù)部分,小數(shù)點去掉string a = s[1] + s.substr(3,k-3);//指數(shù)部分int b = stoi(s.substr(k+1));//小數(shù)點移到起始位置(左移一位),則指數(shù)部分+1;//比如0.2 *10^3, 變成 (0).02*10^4 , 指數(shù)部分3變成4b++;//cout << a<< ' '<<b<<endl;//分情況討論//指數(shù)<0 ,小數(shù)點左移,添-b個0if(b <= 0) a= "0." + string(-b,'0')+a;//指數(shù)>0 ,且位數(shù)太多,后面添零else if( b >= a.size()) a+= string(b-a.size(),'0');//指數(shù)>0,小數(shù)點在中間,右移b位//比如a = 11222, b =2,小數(shù)點從開頭往后移動2位:// a = 11.222else a = a.substr(0,b) + '.' +a.substr(b);cout<< a<<endl; }題目鏈接
PAT甲級1073 Scientific Notation
https://www.acwing.com/problem/content/1561/
總結(jié)
以上是生活随笔為你收集整理的PAT甲级1073 Scientific Notation:[C++题解]字符串处理、科学计数法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PAT甲级1060 Are They E
- 下一篇: PAT甲级1077 Kuchiguse: