1010 Radix (25 分)

  • 题意 :radix进制
  • 题意 :给两个数和其中一个数的进制,问另一个数能否在某一进制下与这数相等
  • 思路 :如果tag等于2就交换,最后还是只需要处理tag为1这种情况,这种思路值得学习;第一步,将n1转换成十进制,考虑这是否能存下,n1不超过十位数字,所以最大是十个z,也就是三十六进制,十个z小于1后面十个0,也就是小于361036^{10}3610,3e15多些,也就是说可以用long long存下;第二步,判断n2在什么进制下等于target,注意n2可能不止36进制,比如n2是(10)b=b(10)_b=b(10)b​=b,n1最大又是3e15,所以我们最大可以弄一个3e15次方,所以枚举的时候不止枚举到36次 ,也就是说这个枚举的区间非常大,我们就想到能否能用二分来求呢,我们发现,当枚举的进制变大时,n2也会变大,这是一个单调的过程,所以我们可以用二分来求这个进制;
  • 二分需要一个左右边界,右边界是target+1,左边界应该等于n2的最大的这一位加1
  • 在calc中,res可能会爆long long,如果太大,大于1e16了已经,我们知道n1最大值是3e15,此时一定无解,则直接返回1e18;注意calc中参数的进制r也是要用long long的
  • r如果直接取target,那么6 6 1 10这个样例会返回6,但答案是7。
  • 注意代码中多次将int主动转成long long的情形
  • 两个数相乘的结果可能long long也存不下,溢出可能变成负数也可能变成正数,所以要用double
  • 语法 :swap函数在algorithm 头文件中
#include <iostream>
#include <algorithm>using namespace std;typedef long long ll;int get(char c)
{if (c <= '9') return c - '0';return c - 'a' + 10;
}ll calc(string n, ll r)
{ll res = 0;for (auto c : n){if ((double)res * r + get(c) > 1e16) return 1e18;res = res * r + get(c);}return res;
}int main()
{string n1, n2;cin >> n1 >> n2;int tag, radix;cin >> tag >> radix;if (tag == 2) swap(n1, n2);ll target = calc(n1, radix);ll l = 0, r = target + 1;// ll l = 0, r = max(target, 36ll);for (auto c : n2) l = max(l, (ll)get(c) + 1);while (l < r){ll mid = l + r >> 1;if (calc(n2, mid) >= target) r = mid;       // == problem!else l = mid + 1;}if (calc(n2, r) == target) cout << r;else cout << "Impossible";return 0;
}

1015 Reversible Primes (20 分)

  • 题意 :首先判断N是不是质数。然后将N转成D进制数,将D进制数翻转后,转回十进制数,看得到的这个数是否是质数。
  • 思路 :nnn%ddd是n在d进制下最后一位数,也就是在d进制下的个位,在翻转后,这位应该是第一位,将翻转后的结果变成十进制时是要从最高位开始做。这样就将最后三步化为了一步。
  • 语法 :逗号表达式的值是最后一个的值;NNN最大是10510^5105,那么如果是二进制的话就会有十几位,十五六位,所以得用longlonglong longlonglong存转换之后的结果。
#include <iostream>using namespace std;typedef long long LL;bool is_prime(int n)
{if (n == 1) return false;for (int i = 2; i * i <= n; i ++ )if (n % i == 0)return false;return true;
}bool check(int n, int d)
{if (!is_prime(n)) return false;LL r = 0;while (n){r = r * d + n % d;n /= d;}return is_prime(r);
}int main()
{int n, d;while (cin >> n >> d, n >= 1){if (check(n, d)) puts("Yes");else puts("No");}return 0;
}

1019 General Palindromic Number (20 分)

  • 题意 :给出一个数和一个进制,判断这个数在这个进制下的结果是否是回文数。
  • 思路 :判断回文数(i只要<j就可以了);十进制转其它进制,用vector存更方便;十进制转其它进制,注意n为0的情况要特殊讨论;十进制转其它进制时,先得到的是其它进制下的最低位,因为它最先被放入vector,且在输出其它进制下的这个数时,是从高位向低位输出,所以先从vector的最后一位开始输出。
  • 语法 :reverse函数在algorithm头文件;使用vector记得加头文件vector;vector最后一个元素,back()
#include <iostream>
#include <vector>using namespace std;vector<int> nums;bool check()
{for (int i = 0, j = nums.size() - 1; i < j; i ++ , j -- )if (nums[i] != nums[j])return false;return true;
}int main()
{int n, b;cin >> n >> b;if (!n) nums.push_back(0);while (n) nums.push_back(n % b), n /= b;if (check()) puts("Yes");else puts("No");cout << nums.back();for (int i = nums.size() - 2; i >= 0; i -- ) cout << ' ' << nums[i];return 0;
}

1027 Colors in Mars (20 分)

  • 题意 :将输入的十进制数转为十三进制数
  • 思路 :注意这里输入的十进制数最大为168,意味着转化为十三进制后最多只有两个数字,这也恰好可以解决题目要求的如果只有一位数字必须左添0,也就是说无论如何输出的都是两位数字的十三进制数;注意这种将十进制数转为大于十的进制数的“get“方式。
  • 语法 :int转char
#include <iostream>using namespace std;int a[3];char get(int x)
{if (x > 9) return 'A' + x - 10;return '0' + x;
}int main()
{for (int i = 0; i < 3; i ++ ) cin >> a[i];cout << '#';for (int i = 0; i < 3; i ++ ) cout << get(a[i] / 13) << get(a[i] % 13);return 0;
}

1100 Mars Numbers (20 分)

  • 思路 :重要的一点是高进制和低进制的英文单词没有重复,所以可以直接连接在同一个数组中
  • 语法 :stringstream头文件为sstream
#include <iostream>
#include <sstream>using namespace std;char names[][5] = {"tret", "jan", "feb", "mar", "apr", "may", "jun", "jly", "aug", "sep", "oct", "nov", "dec", "tam", "hel", "maa", "huh", "tou", "kes", "hei", "elo", "syy", "lok", "mer", "jou"};int get(string word)
{for (int i = 0; i < 25; i ++ )if (names[i] == word){if (i < 13) return i;return 13 * (i - 12);}return -1;      // 一定不会执行
}int main()
{int T;cin >> T;getchar();while (T -- ){string line;getline(cin, line);stringstream ssin(line);if (line[0] <= '9'){int v;ssin >> v;if (v < 13) cout << names[v] << endl;else{cout << names[12 + v / 13];if (v % 13 != 0) cout << " " << names[v % 13];cout << endl;}}else{string word;int res = 0;while (ssin >> word) res += get(word);cout << res << endl;}}
}

PAT甲级题目翻译+答案 AcWing(进位制)相关推荐

  1. PAT甲级题目翻译+答案 AcWing(高精度)

    1002 A+B for Polynomials (25 分) 题意 :给两个多项式,输出两个多项式相加结果的系数和次数 思路 :用double数组记录多项式,正好数组下标是整数,系数是double ...

  2. PAT甲级题目翻译+答案 AcWing(数学)

    1059 Prime Factors (25 分) 题意 : 给一正整数,要求分解质因数 思路 : 使用is_first,来完成除了第一个质因数前都有*的效果 如果n=1,要特判 最后如果n>1 ...

  3. PAT甲级题目翻译+答案 AcWing(排序)

    1012 The Best Rank (25 分) 题意 :给ID和3门成绩,计算其平均分A,输出每位学生最好的排名,A>C>M>E 思路 :如果将所需的若干个元素中使第一个元素为后 ...

  4. PAT甲级题目翻译+答案 AcWing(模拟)

    1008 Elevator (20 分) 思路 :last可能等于cur,而无论是否相等,res都是+5的 #include <iostream>using namespace std;i ...

  5. PAT甲级题目翻译+答案 AcWing(动态规划)

    1007 Maximum Subsequence Sum (25 分) 题意 :注意最后输出的不是索引而是在那个索引的数 思路 :f为当前的假设开始指针,每一次累加到sum,如果sum大于res,就更 ...

  6. PAT甲级题目翻译+答案 AcWing(图论)

    1003 Emergency (25 分) 题意 :求无向图中最短路的数量,以及在最短路情况下,点权之和最大是多少 思路 :dijkstra的扩展一般在第三步"用t更新其它点":s ...

  7. PAT甲级题目翻译+答案 AcWing(字符串处理)

    1001 A+B Format (20 分) 题意 :将整数转换成标准格式 思路 :从后往前遍历字符串进行模拟,每三个数字加一个逗号,但不能是在最前面加逗号,也不能是加在负号后面 #include & ...

  8. PAT甲级题目翻译+答案 AcWing(链表)

    1032 Sharing (25 分) 题意 : suffix后缀:prefix前缀 每个结点存一个字母,一共存两个单词 分别给两个单词的第一个字母的地址以及总共的结点数 给出所有结点的地址数值和下一 ...

  9. PAT甲级题目翻译+答案 AcWing(树)

    1004 Counting Leaves (30 分) 题意 : 家庭关系可以用家谱树来表示,给定一个家谱树,你的任务是找出其中没有孩子的成员. 第一行包含一个整数 N 表示树中结点总数以及一个整数 ...

最新文章

  1. 极光:2021双十一电商行业研究报告
  2. TD8620手持数字特斯拉计一些基本的定标
  3. 【深度学习】图像自动处理工具SimpleITK的使用(Python)
  4. websocket后台推送数据
  5. Visual Studio Online,带来四种开发模式,未来已来。
  6. MySQL数据库模式_SQL模式
  7. 实时体积云渲染(地平线):一.云的生成
  8. 数字取证Linux发行版,Parrot 4.2.2 发布,数字取证Linux发行版
  9. 新员工入职表_【干货】新员工入职全方案:180天详细培训计划
  10. c语言4 答案详解,2019考研数据结构C语言版详解答案(4)
  11. 火狐浏览器——问题解决:网络正常但无法打开百度页面和搜索功能
  12. digispark使用
  13. 双十一,程序员可太难了
  14. ubuntu控制台访问u盘_虚拟机ubuntu访问u盘
  15. php版本降级,wamp技巧之–升级降级PHP版本 | SDT技术网
  16. the connected emulator is a j-link clone
  17. Unity3D引擎之渲染技术系列
  18. 优先级调度算法实现_《操作系统原理》实验一:进程调度
  19. 【单片机系列】基于51单片机的16路抢答器
  20. 华为云计算机gpu,华为云服务器 gpu

热门文章

  1. 采购Invoice校验_事后借记和事后贷记
  2. 采购定价过程字段解析
  3. 从程序员到项目经理,没有捷径可走
  4. 哈士奇与阿拉斯加的区别!
  5. S/4HANA表现抢眼——第一季度SAP大中华区营收再现双位数增长
  6. 用户对OA实施的一些认识误区
  7. 会计记忆总结之三:会计等式与复式记账
  8. 后版权时代——为什么我不看好网易云的音乐社区,而看好腾讯的长音频?
  9. html5里可移动线性进度条的类型怎么表示,HTML5触摸事件实现移动端简易进度条的实现方法...
  10. smarty php5.5,php5中Iterator与smarty整合