秦九韶法和除基取余,倒序排列看看能不能懂
2026-10-10 18:44:19
发布于:贵州
0阅读
0回复
0点赞
R进制转十进制:秦九韶法;十进制转R进制:除基取余,倒序排列
#include <bits/stdc++.h>
using namespace std;
char c[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
// 改成long long防止溢出
long long r_to_t(int base,string a){//r进制转十进制:秦九韶法
long long ans = 0;
for(int i=0;i<a.size();i++){
if(a[i]>='A' && a[i]<='Z'){
ans = ans * base + (a[i]-'A'+10);
}else{
ans = ans * base + (a[i]-'0');
}
}
return ans;
}
string t_to_r(long long a,int r){//十进制转r进制: 除基取余,倒序排列
if(a == 0) return "0";
string s = "";
while(a){
s+=c[a%r];
a/=r;
}
reverse(s.begin(),s.end());//倒序
return s;
}
int main(){
int m;
cin>>m;
while(m--){
int p,q;
char buff[25];//n的长度不超过25位
scanf("%d,%[^,],%d",&p,buff,&q);//%[^,] 读字符数组buff,碰到逗号就停下
string n(buff);//把buff转成字符串n
cout<<t_to_r(r_to_t(p,n),q)<<endl;
}
return 0;
}
这里空空如也







有帮助,赞一个