当前位置: 代码迷 >> 综合 >> PAT乙级 1022 D进制的A+B (20分) 1023 组个最小数 (20分) 1024 科学计数法 (20分)
  详细解决方案

PAT乙级 1022 D进制的A+B (20分) 1023 组个最小数 (20分) 1024 科学计数法 (20分)

热度:81   发布时间:2023-12-17 14:15:45.0

 1022 D进制的A+B (20分) 

取值范围确定,因为int的取值范围在,可直接使用int类型

#include<iostream>
#include<stack>
using namespace std;int main()
{int a, b,d;cin >> a >> b>>d;int all = a + b;stack<int> s;//使用栈方便输出while (all >= d)//算法主体,按照手算方式{s.push(all % d);all = all / d;}s.push(all);//最后一次while循环没法放入栈,所以在外面放一次while (s.size() != 0){cout << s.top();s.pop();}return 0;
}

1023 组个最小数 (20分)

一开始理解错题目意思了,看半天没搞明白,原来输入指的是每一个数字的拥有个数!!!!

使用queue时不能再for里面写q.size(),因为使用q.pop()时size会减小。

#include<iostream>
#include<queue>
using namespace std;int main()
{int arr[10];queue<int> q;for (int i = 0; i < 10; i++)cin >> arr[i];for (int i = 1; i < 10; i++)//先把第一个不是0的最小数放到最前面{if (arr[i] != 0){q.push(i);arr[i]--;break;}elsecontinue;}for (int i = 0; i < 10; i++){while (arr[i] != 0){q.push(i);arr[i]--;}}int temp = q.size();//保存size,防止pop之后size减少for (int i = 0; i < temp; i++){cout<<q.front();q.pop();}return 0;
}

1024 科学计数法 (20分)

        看别人的代码看到一个很厉害自的函数s.substr(pos, n),pos后的n位。感觉自己的思路太复杂了,看到了这个同学的代码,收获很多。一定要记得string函数的使用,方便很多

参考的是这个同学的代码

#include<iostream>
#include<string>
#include<queue>
using namespace std;
int main()
{string a;cin >> a;string pa = a.substr(0, a.find('E'));//获取E前面和后面string pb = a.substr(a.find('E') + 1, a.length());char pas = pa[0]; pa.erase(0,1);//获取两个符号char pbs = pb[0]; pb.erase(0,1);int temp = stoi(pb);//把指数部分转换成intif (temp != 0){if (pbs == '+'){//如果指数小于小数点后的位数,直接把小数点转换即可if (pa.length() - 2 > temp){pa.insert(temp + 2, ".");}if (pa.length() - 2 < temp){for (int i = pa.length() - 2; i < temp; i++)//差多少补多少pa.append("0");}pa.erase(1, 1);}else{pa.erase(1, 1);for (int i = 1; i < temp; i++)pa.insert(0, "0");pa.insert(0, "0.");}}if (pas == '+')cout << pa;elsecout << pas << pa;return 0;
}