大整数进制转换

大数运算一般用数组来做,这里用数组来模拟短除法
非函数版

#include<bits/stdc++.h>
using namespace std;
int m,n;
string input,output="";
int data[1000];//根据需要更改
int main(){//m是原来的进制,n是要转换的进制 
    cin>>m>>n;
	cin>>input;//把input转化成数字保存在数组中 
    memset(data,0,sizeof(data));
	for(int i=0;i<input.size();i++) {
		if(input[i]<=57) data[i]=input[i]-'0';//57在ASCII码中是9
		else data[i]=input[i]-'A'+10;
	}
	//转换 
	bool flag=true;
	while(flag){
		int num=0;
	    flag=false;
	    for(int i=0;i<input.size();i++){
		    num=num*m+data[i];
		    data[i]=num/n;
		    num=num%n;
		    if(data[i]!=0&&flag==false) flag=true;//当data[]数组全是0时,flag=false,不再进入循环 
	    }//for循环执行完之后num是本次短除之后的余数 
	    char x;
	    if(num<=9) x='0'+num;
	        else x='A'+num-10;//数字转字符 
	    string s(1,x);//字符串s中有1个字符x  ****新的字符串赋值方法 
        //string s(p,'1'); 符串s中有p个字符1
	    output.insert(0,s);//插在前面 ,output.insert()函数只能插入字符串,不能插入字符
    } 
	cout<<output<<endl;
    return 0;
}

大整数进制转换
函数版

#include<bits/stdc++.h>
using namespace std;
int m,n;
string input,output="";
int data[1000];//根据需要更改//字符串初始化
bool div(){
	int num=0;
	bool flag=false;
	for(int i=0;i<input.size();i++){
		num=num*m+data[i];
		data[i]=num/n;
		num=num%n;
		if(data[i]!=0) flag=true;
	}//for循环执行完之后num是本次短除之后的余数 
	char x;
	if(num<=9) x='0'+num;
	else x='A'+num-10;
	string s(1,x);//字符串s中有1个字符x  ****新的字符串赋值方法 
    //string s(p,'1'); 符串s中有p个字符1
	output.insert(0,s);//插在前面 ,output.insert()函数只能插入字符串,不能插入字符 
	return flag;
}
void trans(){
	bool flag=true;
	while(flag) flag=div();//当data[]数组全是0时,flag=false,不再进入循环 
	cout<<output<<endl;
}
int main(){//m是原来的进制,n是要转换的进制 
    cin>>m>>n;
	cin>>input;//把input转化成数字保存在数组中 
    memset(data,0,sizeof(data));
	for(int i=0;i<input.size();i++) {
		if(input[i]<=57) data[i]=input[i]-'0';//57在ASCII码中是9
		else data[i]=input[i]-'A'+10;
	}
	trans(); //转换 
    return 0;
}

大整数进制转换