文章

25

粉丝

82

获赞

480

访问

33.4k

头像
进制转换3 题解:
P1422 清华大学/厦门大学机试题
发布于2024年8月26日 23:39
阅读数 2.0k

vector总是越界输出,输出乱码

已扩充的值失效

  1. //输入可能是字符和数字混合
  2. //最大为36进制数就是只有26个字母
  3. //输出也要字符和数字混合
  4. #include <iostream>
  5. #include <vector>
  6. #include <algorithm>
  7. using namespace std;
  8. int main(){
  9. int m,n,w;
  10. long long num = 0;
  11. string str,ba;
  12. //不用vector<char> 就是string
  13. cin>>m>>n;
  14. getchar();
  15. cin>>str;
  16. //先把m进制转化为10进制
  17. //从高位开始读取,已读数翻m倍,加上当前值作为尾数
  18. for(int i = 0; i<=str.size()-1 ;i++){
  19. num *= m;
  20. if(str[i]>='0'&&str[i]<='9') num += str[i] - '0';
  21. if(str[i]>='A'&&str[i]<='Z') num += str[i] - 'A' + 10;
  22. if(str[i]>='a'&&str[i]<='z') num += str[i] - 'a' + 10;
  23. }
  24. //十进制转n进制
  25. char ch;
  26. int cnt = 0;
  27. while(num>0){
  28. w = num%n;
  29. if(w<10){
  30. ch = w + '0';
  31. }
  32. else{
  33. ch = w-10 + 'a';
  34. //小写
  35. }
  36. ba[cnt++] = ch;
  37. num /= n;
  38. }
  39. //逆序输出
  40. int len = cnt;
  41. // int len = ba.size();
  42. // string和vector的size读取总是在改写值依旧还是失效的
  43. // 修改过程就直接赋值
  44. for(int i = len-1; i>=0; i--){...
登录查看完整内容


登录后发布评论

4 条评论
ererfou
2025年3月7日 12:55

我也是通过率是80%,你找到原因吗

 

赞(0)

Theeastisred : 回复 ererfou: 我也是通过率80%,不知道漏了哪种情况

2025年3月8日 10:53

快乐小土狗 : 回复 Theeastisred: 输出的值超出了int范围

2025年3月8日 12:10

ererfou : 回复 快乐小土狗: 最后的答案类型值改longlong

2025年3月9日 17:01