考研算法 2022.2.26

123 阅读1分钟

考研算法

题目

题目链接

题目要求

任意进制间的转换

C++代码

#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;

int main()
{
    int m,n;
    cin>>m>>n;
    string s;
    cin>>s;
    if (s=="0")
    {
        cout<<"0";
    }
    vector<int> A;
    for (int i=s.size()-1;i>=0;i--)
    {
        if (s[i]>='A' && s[i]<='Z')
        {
            A.push_back(s[i]-'A'+10);        
        }
        else
        {
            A.push_back(s[i]-'0');
        }
    }
    string res;
    while(A.size())
    {
        int r=0;
        for(int i=A.size()-1;i>=0;i--)
        {
            A[i]=r*m+A[i];
            r=A[i]%n;
            A[i]/=n;
        }
        while(A.size() && A.back()==0)
        {
            A.pop_back();
        }
        if (r<10)
        {
           res+=to_string(r);
        }
        else
        {
           res+=r-10+'a'; 
        }
    }
    reverse(res.begin(),res.end());
    cout<<res;
    return 0;
}

知识点

ASCII码表

s[i]-'A'+10 /r-10+'a' ASCII码表,A 65,a 97

运算时会将其当做整数

cout<<'Z'-'A';输出25;

string w;
w="test";
w+=10+'a';
cout<<w;

以上输出 k

cout<<(char)(10+'a');

以上输出 k

cout<<(10+'a');

以上输出 107

进制转换

关键代码

while(A.size())
{
    int r=0;
    for(int i=A.size()-1;i>=0;i--)
    {
        A[i]=r*m+A[i];
        r=A[i]%n;
        A[i]/=n;
    }
    while(A.size() && A.back()==0)//去掉前面的0
    {
        A.pop_back();
    }
    if (r<10)
    {
       res+=to_string(r);
    }
    else
    {
       res+=r-10+'a'; 
    }
}

python代码

m,n=map(int,input().split())
A=input()
a=[]
for i in A:
    if i>='A':
        a.append(int(ord(i)-ord('A')+10))
    else:
        a.append(int(i))
res=[]
a.reverse()
while (len(a)):
    r=0
    for i in range(len(a)):
        a[len(a)-1-i]=r*m+a[len(a)-1-i]
        r=a[len(a)-1-i]%n
        a[len(a)-1-i] = int(a[len(a)-1-i]/n)
    while ( len(a) and a[-1]==0 ):a.pop()
    if r<10:
        res.append(r)
    else:
        res.append(chr(r-10+ord('a')))
res.reverse()
for i in res:
    print(i,end='')

知识点

关于range倒叙输出

在这个地方改了好久 for i in range(len(a)-1,-1,-1):

for i in range(len(a)-1,0,-1):

python关于ASCII

Python字符与ASCII码转换 - mrzero - 博客园 (cnblogs.com)
>>>print ord('a')
97
>>>print chr(97)
a