P1143 进制转换
题目描述
请你编一程序实现两种不同进制之间的数据转换。
输入格式
共三行,第一行是一个正整数,表示需要转换的数的进制 n (2≤n≤16)n\ (2\le n\le 16)n (2≤n≤16),第二行是一个 nnn 进制数,若 n>10n>10n>10 则用大写字母 A∼F\verb!A!\sim \verb!F!A∼F 表示数码 10∼1510\sim 1510∼15,并且该 nnn 进制数对应的十进制的值不超过 10910^9109,第三行也是一个正整数,表示转换之后的数的进制 m (2≤m≤16)m\ (2\le m\le 16)m (2≤m≤16)。
输出格式
一个正整数,表示转换之后的 mmm 进制数。
输入输出样例 #1
输入 #1
16
FF
2
输出 #1
11111111
题解
#include "bits/stdc++.h"
using namespace std;
long long idx = 1;
int ans[100000000], n, m, sum = 0;
string a[6] = {"A", "B", "C", "D", "E", "F"}, s;
int main(){
cin>>n>>s>>m;
for(int i=s.size()-1;i>=0;i--){
if((s[i] - '0') > 10) ans[idx] = s[i] - 'A' + 10;
else ans[idx] = s[i] - '0';
idx++;
}
int x = 0;
for(int i=1;i<idx;i++){
sum += ans[i] * pow(n, x);
ans[i] = 0;
x++;
}
// cout<<sum<<endl;
idx = 1;
while(sum/m != 0){
ans[idx] = sum%m;
// cout<<n%16<<endl;
sum/=m;
idx++;
}
ans[idx] = sum;
for(int i=idx;i>=1;i--){
if(ans[i] >= 10) cout<<a[ans[i]-10];
else cout<<ans[i];
}
return 0;
}
504

被折叠的 条评论
为什么被折叠?



