欢迎使用本站,预祝练习时长两年半的选手们到成功! [本模块信息来自tem/def/head]

dxw 栈的类型题 进制转换

时间:2024-06-15 09:56 作者:admin 点击:
进制转换问题: 输入一个进制a,输入一个a进制的数字n,再输入一个进制b(已知a和b不超过32) 输出这个数字的b进制的形式 输入: 2 11111111 16 输出: ff ------ a和b以数字形式存储,数字

进制转换问题:

输入一个进制a,输入一个a进制的数字n,再输入一个进制b(已知a和b不超过32)

输出这个数字的b进制的形式

输入:

2

11111111

16

输出:

ff

------

a和b以数字形式存储,数字n用字符串存储

函数1:将a进制数字转换成十进制

16进制2f5

2*16^2+f*16^1+5*16^0

2*256+15*16+5*1

757


函数2:将十进制数字转换成b进制

2|75   1

2|37   1

2|18   0

2| 9   1

2| 4   0

2| 2   0

2| 1   1

   0


#include <iostream>

#include <cmath>

using namespace std;

//方案1:使用时计算

int getten(char c){

   if(c>='0'&&c<='9') return c-'0';

   if(c>='a'&&c<='z') return c-'a'+10;

   return -1;//输入不正确

}

char getr(int p){

   if(p<10) return (char)(p+48);

   else if(p<32) return (char)(p+97-10);

   return 0;//输入不正确

}

//方案2:提前初始化

int num[128]={};

char jz[128]={};

void init(){

   for(int i=48;i<=57;i++) num[i]=i-48;

   for(int i=97;i<=122;i++) num[i]=i-97+10;

   //使用时 num[c] 就相当于代表的数字

   for(int i=0;i<=9;i++) jz[i]=i+48;

   for(int i=10;i<32;i++) jz[i]=i+97-10;

   ///使用时 jz[p] 就相当于数字代表的字符

}

int atoten(string n,int a){

   int sum=0;

   int j=0;

   for(int i=n.size()-1;i>=0;i--){

       sum+=num[n[i]]*pow(a,j++);//方案2

       //sum+=getten(n[i])*pow(a,j++);//方案1

   }

   return sum;

}

string tentob(int m,int b){

   int sta[1000]={},top=0,bottom=0;

   while(m){

       sta[top++]=m%b;

       m/=b;

   }

   string numb="";

   while(top!=bottom){

       numb+=jz[sta[top-1]];

       top--;

   }

   return numb;

}

int main(){

   init();

   int a,b;

   string n;

   cin>>a>>n>>b;

   int m=atoten(n,a);

   string s=tentob(m,b);

   cout<<s;

   return 0;

}

------


括号匹配问题:


(责任编辑:admin)
    顶一下
    (0)
    0%
    踩一下
    (0)
    0%