大数任意进制转换模板

第一种(大数)

#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;
    }
}

posted @ 2018-04-23 13:03  MCQ  阅读(302)  评论(0编辑  收藏  举报