首先说说10进制转化为m进制,(2<=m<=16),输入一个n(long long范围),大于10用A,B,C,D,E,F表示,输出他转化为m进制的后(用数组实现)
思路
m进制转化为10进制相信大家都会,每一个位上的数组乘pow(m,位数所在位置-1)的总和,那么10进制怎么转成m进制就将这个过程反过来即可,即一直n%m,用整形数组记录n%m的值,每一次循环完n/=m进入下一次循环,直到n为0停止,这时数组里面存的就是要转化后对应数字的逆序,
但是我们怎么将大于10的数字转化为字母,其实加个特判就行了。
代码如下
#define _CRT_SECURE_NO_WARNINGS #include#include #include using namespace std; int arr[101]; int main() { long long int a, b,i=0; scanf("%lld%lld", &a, &b); while (a) { arr[i++] = a % b; a /= b; } if (b < 10) { for (long long int j = i - 1; j >= 0; j--) { printf("%d", arr[j]); } } else { for (long long int j = i - 1; j >= 0; j--) { if (arr[j] < 10) { printf("%d", arr[j]); } else if(arr[j]>=10) { printf("%c",(char)(arr[j]+65-10)); } } } return 0; }
下面解决给了一个m进制数字转化为n进制问题,输入有三行,第一行表示要转化的n进制(整数),第二行为该进制数(字符串),第三行为要转化的m进制(整数)。
输出只有一行 转化后的m进制
思路:即就在第一部分加一个转化10进制即可
代码如下:
//此处我将转化10进制弄成了函数(此代码只能算int,想算long long可以自己改改,有不足欢迎大家来告知)
#define _CRT_SECURE_NO_WARNINGS #include#include #include #include using namespace std; int arr[101]; char su[101]; int fun(char arr[], int n1, int n2)//n1 weishu n2 zhuanghua { int num = 0; if (n2 <= 10) { for (int i = 0; i < n1; i++) { num = num * n2 + (arr[i] - '0'); } } else { for (int i = 0; i < n1; i++) { if (arr[i] >= 'A') { num = num * n2 + (arr[i] - 'A' + 10); } else { num = num * n2 + (arr[i] - '0'); } } } return num; } int main() { int n,b;//start jinzhi the end scanf("%dn%sn%d", &n, su, &b); int s1 = strlen(su); int a, i = 0; a = fun(su, s1, n); while (a) { arr[i++] = a % b; a /= b; } if (b < 10) { for (int j = i - 1; j >= 0; j--) { printf("%d", arr[j]); } } else { for (int j = i - 1; j >= 0; j--) { if (arr[j] < 10) { printf("%d", arr[j]); } else if (arr[j] >= 10) { printf("%c", (char)(arr[j] + 65 - 10)); } } } return 0; }



