PAT 甲级 A1060 (2019/02/22)
Posted zjsaipplp
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PAT 甲级 A1060 (2019/02/22)相关的知识,希望对你有一定的参考价值。
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 using namespace std; 5 int n; 6 string Deal(string S, int &e){ 7 int k = 0; //s的下标 8 while(S.length() > 0 && S[0] == ‘0‘){ 9 S.erase(S.begin()); //去掉S的前导0 10 } 11 if(S[0] == ‘.‘){ //若去掉前导0后是小数点,则说明S是小于1的学生 12 S.erase(S.begin()); //去掉小数点 13 while(S.length() > 0 && S[0] == ‘0‘){ 14 S.erase(S.begin()); //去掉小数点后面非零位前的所有零 15 e--; //每去掉一个零,指数e减1 16 } 17 }else{ //若去掉前导0后不是小数点,则找到后面的小数点删除 18 while(k < S.length() && S[k] != ‘.‘){ //寻找小数点 19 k++; 20 e++; //只要不遇到小数点,就让指数e++ 21 } 22 if(k < S.length()){ //while结束后k<S.length(),说明遇到了小数点 23 S.erase(S.begin() + k); //删除小数点 24 } 25 } 26 if(S.length() == 0){ 27 e = 0; //如果去掉前导0后S的长度为0,则这个数为0 28 } 29 int num = 0; // 30 k = 0; 31 string res; 32 while(num < n){ //只要精度还没到n 33 if(k < S.length()) 34 res +=S[k++]; //只要还有数字,就加到res末尾 35 else 36 res += ‘0‘; //否则res末尾添加0 37 num++; //精度加1 38 } 39 return res; 40 } 41 int main(){ 42 string S1, S2, S3, S4; 43 cin >> n >> S1 >> S2; 44 int e1 = 0, e2 = 0; //e1 e2为S1 S2的指数 45 S3 = Deal(S1, e1); 46 S4 = Deal(S2, e2); 47 if(S3 == S4 && e1 == e2) //若主体&指数相同,则输出“YES” 48 cout << "YES 0." << S3 << "*10^" << e1 << endl; 49 else //这里对于YES,NO应该是字母全部大写 50 cout << "NO 0." << S3 << "*10^" << e1 << " 0." << S4 << "*10^" << e2 << endl; 51 return 0; 52 }
以上是关于PAT 甲级 A1060 (2019/02/22)的主要内容,如果未能解决你的问题,请参考以下文章