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进制的方法的主要内容,如果未能解决你的问题,请参考以下文章

十进制与m进制的相互转化

十进制转成二进制

数据类型及常用方法

怎样用python编程将二进制转成10进制

笔试碰到的

10进制转成2进制 然后相加