问题 E: 贝贝的数学课
题目描述
贝贝很喜欢上数学课,因为他觉得数学课可以带给他很多乐趣,不会像其它科目那样显得沉闷,一天,数学为了提高学生的学习兴趣,便出了一道有趣的数学题目:
首先,他把全班分成k个小组,游戏开始前,会把三个数据n,t,m写在黑板上,他要求把一个n进制的数t,转换成m进制数。哪个小组最快算出这个m进制数,将会得到奖品,奖品会分发给小组的每个同学。
请你编一程序,帮助贝贝所在小组获胜。
【输入格式】
输入数据共有三行,第一行是一个正整数,表示需要转换的数的进制n(2≤n≤16),第二行是一个n进制数,若n>10则用大写字母A~F表示数码10~15,并且该n进制数对应的十进制数的值不超过2000000000,第三行也是一个正整数,表示转换之后的数的进制m(2≤m≤16)。
【输出格式】
输出仅一行,包含一个正整数,表示转换之后的m进制数。
【输入样例】
16
FF
2
【输出样例】
11111111
我的代码:
#include<bits/stdc++.h>
using namespace std;
int f(int jk,int p){
if(p==0) return 1;
int q=1;
for(int i=1;i<=p;i++){
q=q*jk;
}return q;
}
string ch;
int n,s,u,h;
int l;
int k[114514];
int a[114514];
int main(){
cin>>n>>ch>>s;
l=ch.size();
if(n==s){
cout<<ch;
return 0;
}
for(int i=0;i<l;i++){
if(n>10) k[i]=int(ch[i]-'A'+10);
else k[i]=int(ch[i]-'0');
}for(int i=0;i<l;i++){
u+=k[i]*f(n,i);
}if(s==10){
cout<<u;
return 0;
}
for(int i=u;i!=0;i/=s){
h++;
a[h]=u%s;
}for(int i=h;i>=1;i--){
cout<<a[h];
}
return 0;
}
请求各位c++人士指出我的代码错误(系统一直说我答案错误)!