【PAT】B1074 宇宙无敌加法器(20 分)

打一开始做就听人说这个难,吓得我把它放到了最后做,不过如此嘛。
这里说说样例的坑点
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;
}
原文地址:https://www.cnblogs.com/hebust/p/9491376.html