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]; }//输出,别忘逆序 }