文章

25

粉丝

19

获赞

2

访问

17.0k

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

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

已扩充的值失效

//输入可能是字符和数字混合
//最大为36进制数就是只有26个字母
//输出也要字符和数字混合 
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main(){
	int m,n,w;
	long long num = 0;
	string str,ba;
	//不用vector<char> 就是string 
	cin>>m>>n;
	getchar();
	cin>>str;
	//先把m进制转化为10进制
	//从高位开始读取,已读数翻m倍,加上当前值作为尾数
	for(int i = 0; i<=str.size()-1 ;i++){
		num *= m;
		if(str[i]>='0'&&str[i]<='9')  num += str[i] - '0';
		if(str[i]>='A'&&str[i]<='Z')  num += str[i] - 'A' + 10;
		if(str[i]>='a'&&str[i]<='z')  num += str[i] - 'a' + 10;
	}
	//十进制转n进制
	char ch;
	int cnt = 0;
	while(num>0){
		w = num%n;
		if(w<10){
			ch = w + '0';
		}
		else{
			ch = w-10 + 'a';
			//小写
		}
		ba[cnt++] = ch;
		num /= n;
	}
	//逆序输出
	int len = cnt; 
//	int len = ba.size();
//  string和vector的size读取总是在改写值依旧还是失效的
//  修改过程就直接赋值 
	for(int i = len-1; i>=0; i--){...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发