80救

B3849 [GESP样题 三级] 进制转换

yjx1234 @ 2024-08-18 12:22:56

#include<bits/stdc++.h>
using namespace std;
void find(int n,int m){
    if(n==0) return;
    find(n/m,m);
    if(n%m==1)
        cout<<'1';
    if(n%m==2)
        cout<<'2';
    if(n%m==3)
        cout<<'3';
    if(n%m==4)
        cout<<'4';
    if(n%m==5)
        cout<<'5';
    if(n%m==6)
        cout<<'6';
    if(n%m==7)
        cout<<'7';
    if(n%m==8)
        cout<<'8';
    if(n%m==9)
        cout<<'9';  
    if(n%m==10)
        cout<<'A';
    if(n%m==11)
        cout<<'B';
    if(n%m==12)
        cout<<'C';
    if(n%m==13)
        cout<<'D';
    if(n%m==14)
        cout<<'E';
    if(n%m==15)
        cout<<'F';
    if(n%m==16)
        cout<<'G';
    if(n%m==17)
        cout<<'H';
    if(n%m==18)
        cout<<'I';
    if(n%m==19)
        cout<<'J';
    if(n%m==20)
        cout<<'K';
    if(n%m==21)
        cout<<'L';
    if(n%m==22)
        cout<<'M';
    if(n%m==23)
        cout<<'N';
    if(n%m==24)
        cout<<'O';
    if(n%m==25)
        cout<<'P';
    if(n%m==26)
        cout<<'Q';
    if(n%m==27)
        cout<<'R';
    if(n%m==28)
        cout<<'S';
    if(n%m==29)
        cout<<'T';
    if(n%m==30)
        cout<<'U';
    if(n%m==31)
        cout<<'V';
    if(n%m==32)
        cout<<'W';
    if(n%m==33)
        cout<<'X';
    if(n%m==34)
        cout<<'Y';
    if(n%m==35)
        cout<<'Z';
}
int main(){
    int n,m;
    cin>>n>>m;
    if(n==m&&n<=10){
        cout<<n-1;
    }
    else{
    if(n==11)
        cout<<'A';
    if(n==12)
        cout<<'B';
    if(n==13)
        cout<<'C';
    if(n==14)
        cout<<'D';
    if(n==15)
        cout<<'E';
    if(n==16)
        cout<<'F';
    if(n==17)
        cout<<'G';
    if(n==18)
        cout<<'H';
    if(n==19)
        cout<<'I';
    if(n==20)
        cout<<'J';
    if(n==21)
        cout<<'K';
    if(n==22)
        cout<<'L';
    if(n==23)
        cout<<'M';
    if(n==24)
        cout<<'N';
    if(n==25)
        cout<<'O';
    if(n==26)
        cout<<'P';
    if(n==27)
        cout<<'Q';
    if(n==28)
        cout<<'R';
    if(n==29)
        cout<<'S';
    if(n==30)
        cout<<'T';
    if(n==31)
        cout<<'U';
    if(n==32)
        cout<<'V';
    if(n==33)
        cout<<'W';
    if(n==34)
        cout<<'X';
    if(n==35)
        cout<<'Y';
    if(n==36)
        cout<<'Z';
}
    find(n,m);
    return 0;
}

by daishuohua @ 2024-08-23 18:42:04

给我眼睛看聋了,写那么长,看不懂


by a31415926465 @ 2024-09-06 20:10:01

给我眼睛看瞎了,写那么长,看不懂


by Peter_Li @ 2024-09-16 10:01:49

@yjx1234 将main()函数改为

int main() {
    int n, m;
    cin >> n >> m;
    find(n, m);
    return 0;
}

再在find函数中加个

if(n % m == 0)
        cout << '0';

就行了。

优化后代码如下:

#include<bits/stdc++.h>

using namespace std;
char base[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";

void find(int n, int m) {
    if (n == 0) return;
    find(n / m, m);
    cout << base[n % m];
}

int main() {
    int n, m;
    cin >> n >> m;
    find(n, m);
    return 0;
}

by yjx1234 @ 2024-09-17 21:00:58

@Peter_Li 谢谢,已回关


|