PAT甲级1060 Are They Equal:[C++题解]字符串处理、有效数字、代码简洁!!!
生活随笔
收集整理的這篇文章主要介紹了
PAT甲级1060 Are They Equal:[C++题解]字符串处理、有效数字、代码简洁!!!
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
文章目錄
- 題目分析
- 題目鏈接
題目分析
來源:acwing
分析:字符串處理
題意:把一個數(shù)變成0.xxxxx * 10^xxxxx 的形式(小數(shù)點后面第一個是大于零的數(shù),除非輸入的數(shù)本來就是0),位數(shù)的話超過的話從前往后截取(不是四舍五入),不足的后面補零。表示方法類似科學(xué)計數(shù)法。
思路:
- 用字符串string存數(shù)字。
- 找到小數(shù)點的位置k,用來求計數(shù)法中的指數(shù)
- 字符串中刪掉小數(shù)點,用變量k來計量次冪
- 去掉前導(dǎo)零,過程中k會k--.這一步需要對照樣例來理解,k就是最后要求的次冪!!!
- 位數(shù):不足n的后面補零,使用+string(n-s.size(),'0');超過n位的截取,使用substr函數(shù)。
- 添頭加尾:"0."+ s + "*10^" + to_string(k);
ac代碼
測試數(shù)據(jù)
輸入:2 0.000001 0.1 標答:NO 0.10*10^-5 0.10*10^0 #include<bits/stdc++.h> using namespace std;string change(string a, int n){int k = a.find("."); //找小數(shù)點if(k == -1) a +=".",k =a.find(".");//去掉小數(shù)點string s = a.substr(0,k) + a.substr(k+1);//去掉前導(dǎo)零,小數(shù)點的位置也要變while(s.size() && s[0]=='0') s =s.substr(1),k--;if(s.empty()) k =0;//超過n位截斷if(s.size() > n ) s =s.substr(0,n);//不足n位補足0else s+= string(n-s.size(),'0');return "0."+ s + "*10^" + to_string(k);} int main(){int n;string a, b;cin >> n >> a >> b;a= change(a ,n);b =change(b, n);if(a == b )cout<< "YES "<<a <<endl;else cout<< "NO "<< a <<" " << b<<endl;}題目鏈接
PAT甲級1060 Are They Equal
https://www.acwing.com/problem/content/1548/
總結(jié)
以上是生活随笔為你收集整理的PAT甲级1060 Are They Equal:[C++题解]字符串处理、有效数字、代码简洁!!!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PAT甲级1151 LCA in a B
- 下一篇: PAT甲级1073 Scientific