P1143 进制转换


实在不知道写啥了,浅水一下

https://www.luogu.com.cn/problem/P1143

这是一道很典型的进制转换(好像跟没说似的),我们要做到的就两步:手写理解进制转换,把思路换成代码写进编译器里,那么现在你就已经会做这道题了

我们先想手写转换怎么写:

1.先把输入进来的数统一转换成十进制

一个数的每一位上都对应着一个东西——位权,这个东西就是每一位数的价值,位上数字*这个位的位权就等于这个数字在十进制中的表示,即可得N进制数的十进制为各个位上的值与它的位权的积的和(不理解可以拿一个十进制数推一下)

2.再把十进制数转换为N进制数

这时我们就需要用到取余法,简单来说就是将数M一直/进制N,并随时记录余数,直到M/N,这时再将记录的余数逆序输出,就是结果

不多掰扯,上代码



#include
#include 
#include
using namespace std;
int a,b,i,c,n[50];
int main(){
    string s;
    cin>>a>>s>>c;
    for(int i=s.size()-1;i>=0;i--){
        if(s[i]>='A') b+=(s[i]-'A'+10)*pow(a,s.size()-1-i);//输入进制>9
        else b+=(s[i]-'0')*pow(a,s.size()-1-i);
    } //转十进制
    for(i=0;b>0;i++){
        n[i]=b%c;
        
        b=(b-n[i])/c;
    }//转c进制
    i--;
    for(;i>=0;i--){
        if(n[i]>=10) printf("%c",n[i]+'A'-10);
        else cout<<n[i];
    }//输出,别忘逆序
} 


 

相关