|
本帖最后由 非液化 于 2021-8-11 21:59 编辑
- #include<bits/stdc++.h>
- using namespace std;
- string x,y,b[1010];
- string temp[10086];
- int a[10086]; //转化为十进制数a过渡 ,b为对应位数的权
- string s="0123456789ABCDEF",ss;//字符映射表
- int m,n,lx; //m进制x转换为n进制y
- int changeType(char xx)
- {
- if(xx>'A'-1)
- return xx-'A'+10;
- else return xx-'0'; //字符串转数字
- }
- string highMul(string xx,int yy)
- {
- int lxx=xx.size();
- string t="";
- int j=0; //进位
- for(int i=lxx-1;i>=0;i--)
- {
- t=char((changeType(xx[i])*yy+j)%10+'0')+t;
- j=(changeType(xx[i])*yy+j)/10;
- }
- while(j) //处理最高位
- {
- t=char(j%10+'0')+t;
- j/=10;
- }
- return t;
- }
- void highAdd(string xx)
- {
- int lxx=xx.size();
- int t[10086];
- for(int i=0;i<lxx;i++)
- t[i]=changeType(xx[lxx-i-1]);
- for(int i=lxx;i<10086;i++)
- t[i]=0;
- //cout<<t[0]<<t[1]<<t[2]<<endl;
- for(int i=0;i<10086;i++)
- {
- a[i]+=t[i];
- a[i+1]+=a[i]/10;
- a[i]=a[i]%10;
- }
- }
- void highDiv(int i)
- {
- int c=0;
- for(int j=0;j<temp[i].size();j++)
- {
- c=10*c+(temp[i][j]-'0');
- temp[i+1]=temp[i+1]+char(c/n+'0');
- c=c%n;
- }
- while(temp[i+1][0]=='0'&&temp[i+1].size()!=0)//首位去0
- {
- temp[i+1].erase(0,1);
- }
- //cout<<temp[i+1]<<endl;
- y=s[c]+y;
- }
- void tenToN()
- {
- for(int i=0;i<10086;i++)
- {
- temp[i]="";
- }
- for(int i=0;i<10086;i++) //将a数组内容装入字符串t
- {
- temp[0]=char(a[i]+'0')+temp[0];
- }
- while(temp[0][0]=='0'&&temp[0].size()!=0)//首位去0
- {
- temp[0].erase(0,1);
- }
- //cout<<"t"<<t<<endl;
- y="";
- int i=0;
- while(temp[i]!="")
- {
- highDiv(i);
- i++;
- }
- while(y[0]=='0'&&y.size()!=0)
- {
- y.erase(0,1);
- }
- cout<<y;
- }
- void mToTen()
- {
- lx=x.size();
- a[0]=0;
- for(int i=1;i<10086;i++)
- a[i]=0;
- for(int i=0;i<lx;i++)
- {
- if(i==0)
- {
- b[i]="1";
- }
- else
- {
- b[i]=highMul(b[i-1],m);
- }
- //cout<<b[i]<<endl;
- }
- for(int i=lx-1;i>=0;i--)
- {
- string t="";
- t=highMul(b[i],changeType(x[lx-1-i]));
- //cout<<t<<endl;
- highAdd(t);
- }
- }
- int main()
- {
- cin>>x>>m>>n;
- mToTen();
- /*for(int i=0;i<10086;i++)
- cout<<a[i];*/
- tenToN();
- return 0;
- }
复制代码
|
|