进制转化——10进制转化为 m进制及n进制转化为m进制

首先说说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<iostream>
#include<algorithm>
#include<cmath>
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<iostream>
#include<algorithm>
#include<cmath>
#include<string.h>
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;
}