本文主要是介绍PAT甲级1060 Are They Equal:[C++题解]字符串处理、有效数字、代码简洁!!!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 题目分析
- 题目链接
题目分析
来源:acwing
分析:字符串处理
题意:把一个数变成0.xxxxx * 10^xxxxx 的形式(小数点后面第一个是大于零的数,除非输入的数本来就是0),位数的话超过的话从前往后截取(不是四舍五入),不足的后面补零。表示方法类似科学计数法。
思路:
- 用字符串
string
存数字。 - 找到小数点的位置k,用来求计数法中的指数
- 字符串中删掉小数点,用变量k来计量次幂
- 去掉前导零,过程中k会
k--
.这一步需要对照样例来理解,k就是最后要求的次幂!!! - 位数:不足n的后面补零,使用
+string(n-s.size(),'0')
;超过n位的截取,使用substr
函数。 - 添头加尾:
"0."+ s + "*10^" + to_string(k);
ac代码
测试数据
输入: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("."); //找小数点if(k == -1) a +=".",k =a.find(".");//去掉小数点string s = a.substr(0,k) + a.substr(k+1);//去掉前导零,小数点的位置也要变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/
这篇关于PAT甲级1060 Are They Equal:[C++题解]字符串处理、有效数字、代码简洁!!!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!