今天在洛谷上做了道基础数学问题的题,
这道题的第一思路就是先转十进制在转其他进制,
其他进制转十进制:每位上的数字或字符乘以进制的位数-1次幂。
十进制转其他:循环除以n,保留余数,商为0时倒着组合余数。
通过理解题解后的代码,
#include <iostream>
#include <cstring>
using namespace std;
char ans[35]={0};//26+9
int fun(int n,char s[]){ //转10进制
int ten=0, num=0, len=strlen(s);
int k=1;
for(int i=len-1;i>=0;i--){
if(s[i]>='0'&&s[i]<='9'){
num=s[i]-'0';
}
else{
num=s[i]- '7';
}
ten+=(num*k);
k*=n;
}
return ten;
}
int fnu(int ten,int m,char ans[]){ //10进制转其他
int x=ten, index=0, num=0;
while(ten!=0)
{
ten/=m;
x=x%m;
ans[index]=x;
if(ans[index]>=0&&ans[index]<=9){
ans[index]=ans[index]+'0';
}
else{
ans[index]=ans[index]+'7';
}
x=ten;
num++;
index++;
}
return num;
}
int main(int argc, char** argv) {
int n,m;
char s[35]={0};
char ans[35]={0};
cin>>n;
cin>>s;
cin>>m;
int ten=fun(n,s);
int len=fnu(ten,m,ans);
for(int i=len-1;i>=0;i--){
cout<<ans[i];
}
return 0;
}
DAY DAY UP!