pta里的一道进制转换的水题
看题目戳这
一开始想用string 直接累加过去
结果发现b是1e9的范围
然后就想到可能超过10的数不是用字母代替,而是用数字如11 12来代替
所以用string的方法是行不通的
但是我想直接使用string可向下push的特性,就像vector一样
#include<bits/stdc++.h>
using namespace std;
bool fun(string x){
int l=0,r=x.size()-1;
while(l<r){
if(x[l++]!=x[r--]){
return 0;
}
}
return 1;
}
int main(){
int n,b;
cin>>n>>b;
string ans;
do{
ans+=n%b;
//cout<<n%b;
n/=b;
}while(n);
reverse(ans.begin(),ans.end());
if(fun(ans)){
printf("Yes\n");
}else {
printf("No\n");
}
for(int i=0;i<ans.size();i++){
printf("%d",ans[i]);
if(i!=ans.size()-1){
printf(" ");
}else {
printf("\n");
}
}
return 0;
}
但是还是卡第四个点不知为何
接着想明白了string存的是char字符,所以最高只能是127,如果b超过127出来的答案会自动模128
所以只能用int数组
最后倒序输出
代码就出来了
#include<bits/stdc++.h>
using namespace std;
bool fun(int x[],int num){
int l=0,r=num-1;
while(l<r){
if(x[l++]!=x[r--]){
return 0;
}
}
return 1;
}
int main(){
int n,b,z[40],num=0;
cin>>n>>b;
//string ans;
do{
z[num++]=n%b;
//cout<<n%b;
n/=b;
}while(n);
//reverse(ans.begin(),ans.end());
if(fun(z,num)){
printf("Yes\n");
}else {
printf("No\n");
}
for(int i=num-1;i>=0;i--){
printf("%d",z[i]);
if(i!=0){
printf(" ");
}else {
printf("\n");
}
}
return 0;
}
这样就过了