#if 1
#include<iostream>
#include<math.h>
#include<cstring>
using namespace std;
long long int NDfunc(char *s,int len,int n);
void DNfunc(long long int ten, int m,int ret);
int main()
{
int n,m,ret = 0;
long long int now = 0;
char s[100] = { 0 };
int len = 0;
while (1)
{
cin >> n >> s;
cin >> m;
if (s[0] == '-')
{
s[0] = '0';
ret = 1;
}
len = strlen(s);
cout << "len is" << len << endl;
now = NDfunc(s, len, n);
cout << now << endl;
if (n >= 2 && m <= 36 && n != m && now >= -10e18 && now <= 10e18)
break;
}
DNfunc(now, m,ret);
system("pause");
return 0;
}
long long int NDfunc(char *s,int len,int n)
{
int tmp = 0;
long long int ten = 0;
int mi = len - 1;
for (int i = 0; i < len; i++)
{
if (s[i] >= 'A' && s[i] <= 'Z')
{
tmp = s[i] - 'A' + 10;
}
else
{
tmp = s[i] - '0';
}
ten += tmp * pow(n, mi);
mi--;
}
return ten;
}
void DNfunc(long long int ten, int m,int ret)
{
char arr[100] = { 0 };
char tmp;
int j = 0;
long long int n = 0;
while (ten != 0)
{
n = ten % m;
ten /= m;
if (n < 10)
tmp = '0' + n;
else
tmp = n - 10 + 'A';
arr[j] = tmp;
j++;
}
if (ret == 1)
{
cout << "-";
}
for (j; j >= 0; j--)
{
if(arr[j] != 0)
cout << arr[j];
}
printf("\n");
}
#endif
当 10 进制为 10e18时 输出的 33,34,35,36进制大小与网上进制转换器得出的不一样,是后两位不一样,如:R1 - S0;33,
并且将这些数再转换为10进制得出的结果 总比10e18大或小128,很是头疼,望大佬帮忙