n进制转成m进制的方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了n进制转成m进制的方法相关的知识,希望对你有一定的参考价值。
不经过十进制做中转
之前写的完整程序,你测试下。
#include<stdio.h>void convert(int a,int b) //十进制转X进制
int c=a/b,r=a%b;
if(c==0)
printf("%d",r);
return;
else
convert(c,b);
printf("%d",r);
void reconvert(int b,int a) //二进制转X进制
int num = 0, j=1;
while(a)
num += (a%10) * j;
a /= 10;
j *= b;
printf("%d\\n", num);
void menu()
printf("=========================================\\n");
printf("\\t 1: 十进制转换为二进制\\n");
printf("\\t 2: 十进制转换为十六进制\\n");
printf("\\t 3: 二进制转换为十进制\\n");
printf("\\t 4: 二进制转换为十六进制\\n");
printf("\\t 0: 退出\\n");
printf("请选择:");
void main()
int a;
int flag =1;
while(flag)
menu();
scanf("%d",&flag);
if(flag<0||flag>4)
printf("选择非法!\\n");
continue;
printf("请输入数字:");
scanf("%d",&a);
switch(flag)
case 1:
convert(a,2);
break;
case 2:
convert(a,16);
break;
case 3:
reconvert(2,a);
break;
case 4:
reconvert(16,a);
break;
case 0:
printf("谢谢使用!\\n");
return;
printf("\\n");
参考技术A 用位运算就可以了。
对两个N进制字符串求和
// nSystemStrSum.cpp : 定义控制台应用程序的入口点。 // /* N 进制的 两个字符串求和 字符串由0-9 a-z 组成 思路: 若输入不合法,输出提示退出,否则按如下步骤进行 1把两个字符串转成等成长,在短的那个串前加‘0’ 2将串中的每一个字符转成数值 3从后到前 每一位临时变量= 串一的位+串二对应的位 +进位 此位上的数值 = 每一位临时变量%进制 进位 = 每一位临时变量/进制 将数据转成字符 即systemValueStr[此位上的数值]; */ #include "stdafx.h" #include <algorithm> #include <iostream> #include <string> using namespace std; string systemValueStr = "0123456789abcdefghigklmnopkrstuvwxyz"; bool isLeal(string inputStr,int systemValue)//有效性 判断进制和输入的字符串是否在此进制范围内 { if (systemValue<2 || systemValue >35) return false; for (int i = 0; i < inputStr.length(); i++) { if (systemValue <= 10) { if (inputStr[i] - systemValueStr[0]<0 || (inputStr[i] - systemValueStr[systemValue]>0)) return false; else if (!((inputStr[i] - ‘0‘ >= 0 && inputStr[i] - ‘0‘ <= 9) || ((inputStr[i] - ‘a‘ >= 0 && inputStr[i] - ‘a‘ + 10 <= systemValue-1)))) return false; } } } int getIntFromString(char c,int systemValue){//将字符转成数值0~ 进制-1 if (c >= ‘0‘&&c <= ‘9‘) return c - ‘0‘; else return c - ‘a‘ + 10; } string addTwoStrOfNSystem(string inputStr1, string inputStr2, int systemValue){//求和 string result = ""; int len = max(inputStr1.length(), inputStr2.length()); if (inputStr1.length() < inputStr2.length()){//补齐位数 for (int i = inputStr1.length(); i < inputStr2.length(); i++) { inputStr1 = ‘0‘ + inputStr1; } } else if (inputStr1.length() >inputStr2.length()) { for (int i = inputStr2.length(); i < inputStr1.length(); i++) { inputStr2 = ‘0‘ + inputStr2; } } int currentValue; int addNext = 0; for (int i = len - 1; i >= 0; i--) { int temp = getIntFromString(inputStr1[i], systemValue) + getIntFromString(inputStr2[i], systemValue) +addNext; currentValue = temp%systemValue; addNext = temp / systemValue; result = systemValueStr[currentValue] + result; } if (addNext > 0) result = systemValueStr[addNext] + result; return result; } void addTwoStr(){ int system;//进制 string inputStr1; string inputStr2; cout << "please into system" << endl; cin >> system; cout << "please input str1" << endl; cin>>inputStr1; cout << "please input str2" << endl; cin >> inputStr2; if (isLeal(inputStr1, system) && isLeal(inputStr2, system)){ cout << addTwoStrOfNSystem(inputStr1, inputStr2, system) << endl;; } else cout << "please input right system and strs" << endl; } int _tmain(int argc, _TCHAR* argv[]) { addTwoStr(); system("pause"); return 0; }
以上是关于n进制转成m进制的方法的主要内容,如果未能解决你的问题,请参考以下文章