欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

测试点3的分析:1022 D进制的A+B (20分)——15行代码AC

发布时间:2024/2/28 编程问答 40 豆豆
生活随笔 收集整理的这篇文章主要介绍了 测试点3的分析:1022 D进制的A+B (20分)——15行代码AC 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

立志用更少的代码做更高效的表达


PAT乙级最优题解——>传送门


输入两个非负 10 进制整数 A 和 B (≤2​30−1),输出 A+B 的 D (1<D≤10)进制数。

输入格式:
输入在一行中依次给出 3 个整数 A、B 和 D。

输出格式:
输出 A+B 的 D 进制数。

输入样例:
123 456 8
输出样例:
1103


就是模拟手工进制转换的过程

进制转换过程举例: 将十进制的11转换成2进制

  • 11%2 = 1, 记录1, 作为结果位存储
  • 11/2 = 5, 记录5,作为下一个被除数
  • 5%2 = 1, 记录1, 作为结果位存储
  • 5/2 = 2, 记录2, 作为下一个被除数
  • 2%1 = 0, 记录0, 做为结果位存储
  • 2/1 = 1, 记录1, 作为下一个被除数
  • 1%2 = 1, 记录1, 作为结果位存储
  • 1/2 = 0, 被除数为0, 结束运算
  • 逆序输出结果位, 得1011。
  • 其他进制同理


    本题思路: 定义字符串,依次存放, 最后逆序输出。

    注意点:测试点3数据为0 0 任意进制,若用字符串存储,则串位空, 因此需补0


    #include<bits/stdc++.h> using namespace std; int main() {long long a, b, x;cin >> a >> b >> x;a = a+b;string s;while(a) {s += (char)(a%x+'0');a /= x; }if(s.empty()) s+='0'; //测试点3, 如果都是0,那么串为空,需补0. reverse(s.begin(), s.end()); //由于是algorithm里的,所以不需要 s去调用cout << s; return 0; }

    每日一句

    零星的变好,最后也会如星河般闪耀

    总结

    以上是生活随笔为你收集整理的测试点3的分析:1022 D进制的A+B (20分)——15行代码AC的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。