首先說說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("%d\n%s\n%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;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/382821.html
標籤:其他
上一篇:上一個程式員提桶跑路了,我接手后用這些方法優化了專案
下一篇:C語言 圣誕樹(程式員的浪漫)
