打一开始做就听人说这个难,吓得我把它放到了最后做,不过如此嘛。
这里说说样例的坑点
1.最后结果可能高位有0;例如样例结果07201
2.结果会进位,
3.有可能结果是0,(此处取决于你的输出方式)
#include<cstdio>
#include<string.h>
#include<iostream>
#include<map>
#include<algorithm>
using namespace std;
int main(){
char jinzhibiao[21]={' '};
scanf("%s",jinzhibiao); //输入进制表
getchar(); //接受第一行的换行符
char num1[21]={' '},num2[21]={' '};
scanf("%s",num1);
getchar();
scanf("%s",num2);
reverse(jinzhibiao,jinzhibiao+strlen(jinzhibiao));
reverse(num1,num1+strlen(num1));
reverse(num2,num2+strlen(num2));
int flag=0;//进位
int final[21]={0},wei=0;
for(int i=0;i<strlen(jinzhibiao);i++){
int jinzhi;//取出当前位的进制数
if(jinzhibiao[i]=='0') jinzhi=10;
else if(isdigit(jinzhibiao[i])) jinzhi=jinzhibiao[i]-'0';
int n1= (num1[i]==' ')?0:(num1[i]-'0');
int n2= (num2[i]==' ')?0:(num2[i]-'0');
int n=n1+n2+flag;//当前位的结果;
flag=n/jinzhi;
final[wei++]=n%jinzhi;
}
if(flag!=0) final[wei++]=flag;
flag=0;
for(int i=wei-1;i>=0;i--){
if(final[i]==0&&flag==0) continue;
if(final[i]!=0) flag=1;
printf("%d",final[i]);
}
if(flag==0) printf("0");
return 0;
}