33,311
社区成员
发帖
与我相关
我的任务
分享
#include<iostream>
using std::cout;
using std::cin;
using std::endl;
long power(int m,long x);
long otherToTen(int m,long i);
long tenToOther(int m,long i);
void check(int m);
int main()
{
int m1=0,m2=0;
long i=0,j=0,k=0;
cout << "请输入原进制:" << endl;
cin >> m1;
check(m1);
cout << "请输入原数值:" << endl;
cin >> i;
j=otherToTen(m1,i); //j为原进制转成的10进制数
cout << "请输入转换目标进制:" << endl;
cin >> m2;
check(m2);
k=tenToOther(m2,j); //k为最终数值
cout << "转换后的数值为:" << k << endl;
getchar();
return 0;
}
void check(int m)
{
if ( m <= 0 )
{
cout << "请输入正整数进制!\n";
getchar();
exit(0);
}
}
long power(int m,long x)
{
long answer=1;
if ( m == 0)
{
answer = 1;
}
if ( m == 1)
{
answer = x;
}
if ( m > 1)
{
for (int i=1;i<=m;i++)
{
answer=answer * x;
}
return answer;
}
}
long tenToOther(int m,long i)
{
int w,n=0;
long answer=0;
for (w=1;power(w-1,m)<i;w++)
{
n++; //求位数
}
short* num;
num=new short(n);
for (w=1;w<=n;w++)
{
num[w-1]=i / power(n-w,m); //由最高位向后,依次求各位上的值
i= i % power(n-w,m);
answer += (num[w-1] * power(n-1,10));
}
delete num;
return answer;
}
long otherToTen(int m,long i)
{
int w,n=0;
long answer=0;
for (w=1;power(w-1,10)<i;w++)
{
n++;
}
short* num;
num=new short(n);
for (w=1;w<=n;w++)
{
num[w-1]=i / power(n-w,10);
i=i % power(n,10);
answer += (num[w-1] * power(n-1,m));
}
delete num;
return answer;
}