进制转换

 

1.8进制转16进制

string octs,hexs,t;
void OtoH(){
    for(int i=0;i<octs.length();i+=1){
        string s=octs.substr(i,1);
        if(s=="0")t+="000";
        if(s=="1")t+="001";
        if(s=="2")t+="010";
        if(s=="3")t+="011";
        if(s=="4")t+="100";
        if(s=="5")t+="101";
        if(s=="6")t+="110";
        if(s=="7")t+="111";
    }
    int len=t.length();
    for(int i=len;i>=0;i-=4){
        string s;
        if(i<4){
            for(int j=1;j<=4-i;j++){
                s+="0";
            }
        }
        s+=t.substr((i-4>=0)?i-4:0,(i<4)?i:4);
//      cout<<s<<'\n';
        hexs+=mp[s];
    }
}
void INIT(){
    mp["0000"]="0";
    mp["0001"]="1";
    mp["0010"]="2";
    mp["0011"]="3";
    mp["0100"]="4";
    mp["0101"]="5";
    mp["0110"]="6";
    mp["0111"]="7";
    mp["1000"]="8";
    mp["1001"]="9";
    mp["1010"]="A";
    mp["1011"]="B";
    mp["1100"]="C";
    mp["1101"]="D";
    mp["1110"]="E";
    mp["1111"]="F";
}

 

 

2.任意进制转十进制

void moven(string n,int p){
	int num=0;
	stack<int>s;
	if(n=="0")cout<<0;
	else{
		for(int i=0;i<n.length();i++){
			num*=p;
			if(n[i]>='0'&&n[i]<='9')num+=n[i]-'0';
			else num+=(n[i]-'A'+10);
		}
	}
	cout<<num<<'\n';
}

  

3.十进制转任意进制

void moven(int n,int p){
	stack<int>s;
	if(n==0)cout<<0;
	else{
		while(n){
			s.push(n%p);
			n/=p;
		}
	}
	while(s.size()){
		if(s.top()<10)cout<<s.top();
		else cout<<char(s.top()-10+'A');
		s.pop();
	}
	cout<<'\n';
}

  

4.任意进制转任意进制

int moven(string n,int p){
	int num=0;
	stack<int>s;
	if(n=="0")cout<<0;
	else{
		for(int i=0;i<n.length();i++){
			num*=p;
			if(n[i]>='0'&&n[i]<='9')num+=n[i]-'0';
			else num+=(n[i]-'A'+10);
		}
	}
	return num;
}
void movem(int n,int p){
	stack<int>s;
	if(n==0)cout<<0;
	else{
		while(n){
			s.push(n%p);
			n/=p;
		}
	}
	while(s.size()){
		if(s.top()<10)cout<<s.top();
		else cout<<char(s.top()-10+'A');
		s.pop();
	}
	cout<<'\n';
}

move(moven(number,n),m)

  

 5.P2084

代码:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
int n;string s;
int main(){
	cin>>n>>s;int len=s.length();
	for(int i=0;i<len;i++){
		if(s[i]=='0')continue;
		else{
			if(i==0)printf("%d*%d^%d",s[i]-'0',n,len-i-1);
			else printf("+%d*%d^%d",s[i]-'0',n,len-i-1);
		}
	}
	return 0;
}

  

解题思路:

比较简单的一道题,直接遍历输出即可

 

6.P1143

代码:

#include<bits/stdc++.h>
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
#define ll long long
using namespace std;
int n,m,ten=0;
string s;
int ntoten(int n,string s){
	int len=s.length(),ans=0;
	for(int i=len-1;i>=0;i--){
		if(s[i]>='A'&&s[i]<='F'){
			ans+=(s[i]-'A'+10)*(int)(pow(n,len-i-1));
		}else if(s[i]>='0'&&s[i]<='9'){
			ans+=(s[i]-'0')*(int)(pow(n,len-i-1));
		}
	}
	return ans;
}
string tentom(int m,int ten){
	int len=0,a[49];
	string s="";
	while(ten){
		a[++len]=ten%m;
		ten/=m;
	}
	for(int i=len;i>=1;i--){
		if(a[i]>=10)s+=char('A'+a[i]-10);
		else s+=char(a[i]+'0');
	}
	return s;
}
int main(){
	cin>>n>>s>>m;
	ten=ntoten(n,s);
	cout<<tentom(m,ten);
	return 0;
}

  

解题思路:

任意进制转任意进制的模板题

 

7.P1604

代码:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 2e3+39+7;
string s,s1;
int m,len,len1,len2,a[N],b[N],c[N];
int turn1(char c){
	if(c>='0'&&c<='9')return c-'0';
	else return c-'A'+10;
}
char turn2(int c){
	if(c>=0&&c<=9)return char(c+'0');
	else return char('A'+c-10);
}
int main(){
	cin>>m>>s>>s1;
	len=s.length();
	len1=s1.length();
	len2=max(len,len1)+1;
	for(int i=0;i<len;i++)a[len-i]=turn1(s[i]);
	for(int i=0;i<len1;i++)b[len1-i]=turn1(s1[i]);
	for(int i=1;i<=len2;i++){
		c[i]+=a[i]+b[i];
		c[i+1]+=c[i]/m;
		c[i]%=m;
	}
	while(c[len2]==0&&len2>1)len2--;
	for(int i=len2;i>=1;i--)cout<<turn2(c[i]);
	return 0;
}

  

解题思路:

高精加模板,只不过进位时,需要模m

 

8.P1017

代码:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
int n,m;
void jin(int a){
	int k=a%m;
	a=a/m;
	if(k<0){
		k-=m;
		a++;
	}
	if(a)jin(a);
	if(k>9)cout<<char('A'+k-10);
	else cout<<k;
}
int main(){
	cin>>n>>m;
	printf("%d=",n);
	jin(n);
	printf("(base%d)",m);
	return 0;
}

  

解题思路:

与普通的转进制类似,只不过在余数小于0时,需要加上进制数即可

 

 

 

posted @ 2023-02-28 18:12  天雷小兔  阅读(108)  评论(0)    收藏  举报