大数任意进制转换模板
第一种(大数)
#include<iostream>
#include<cstring>
using namespace std;
const int MAXN = 1000;
int t[MAXN], A[MAXN];
char OldData[MAXN], NewData[MAXN]; // 转换前、后的数据
int olds, news; // 转换前、后的进制
// 调用方式:输入olds、news、OldData,然后调用trans(),输出NewData
void trans()
{
int i, len, k;
len = strlen(OldData);
for(i=len; i>=0; --i)
t[len-1-i] = OldData[i] - (OldData[i]<58 ? 48 : OldData[i]<97 ? 55 : 61);
for(k=0; len;)
{
for(i=len; i>=1; --i)
{
t[i-1] += t[i]%news*olds;
t[i] /= news;
}
A[k++] = t[0] % news;
t[0] /= news;
while(len>0 && !t[len-1]) --len;
}
NewData[k] = NULL;
for(i=0; i<k; ++i)
NewData[k-1-i] = A[i] + (A[i]<10 ? 48 : A[i]<36 ? 55 : 61);
}
int main()
{
cin>>OldData>>olds>>news;
trans();
cout<<NewData<<endl;
}
第二种(大数)
#include<iostream>
#include<string.h>
using namespace std;
int a,b,c,d,x;
string s1,s2,yu;
void zhuan()
{
int chu=0,shang;
s2="";
for (a=0;a<s1.size();a++)
{
chu=chu*10+(s1[a]-'0');
shang=chu/x;
if (shang!=0 || s2!="")
{
s2+=(char)(shang+'0');
}
chu=chu%x;
}
yu=(char)(chu+'0')+yu;
if (s2=="") s2="0";
s1=s2;
}
void suan(char x)
{
if (x-'0'>=0 && x-'0'<=9) {cout<<x-'0'; return;}
cout<<(char)('A'+x-'0'-10);
}
int main()
{
//转X进制
while (cin>>x>>s1)
{
yu="";
while (s1!="0")
{
zhuan();
}
for (a=0;a<yu.size();a++) suan(yu[a]);
cout<<endl;
}
}