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

在这里插入图片描述
我的做法是先用字符串存下输入的数字,然后将字符串中的数字字符再存到int数组中方便计算。
注意点
测试点1、3:最后结果位数可能会超过进制位数N
测试点5:和为0时特判输出

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

void change(int a[], string s){
    
    
	for(int i=s.size()-1; i>=0; i--){
    
    
		a[s.size()-1-i] = s[i] - '0';
	}
}

void change2(int a[], string s){
    
    
	for(int i=s.size()-1; i>=0; i--){
    
    
		if(s[i] == '0'){
    
    
			a[s.size()-1-i] = 10 ;
		}else{
    
    
			a[s.size()-1-i] = s[i] - '0';
		}
	}
}

int main(){
    
    
	int jzb[22] = {
    
    0}, a[22] = {
    
    0}, b[22] = {
    
    0}, res[22] = {
    
    0}, jw[22] = {
    
    0};
	string s1, s2, s3;
	cin >> s1 >> s2 >> s3;
	change2(jzb, s1); change(a, s2); change(b, s3);
	
	int lena = s2.size();
	int lenb = s3.size();
	int maxlen = max(lena,lenb);
	for(int i=0; i<maxlen; i++){
    
    
		res[i] = (a[i]+b[i]+jw[i]) % jzb[i];
		jw[i+1] = (a[i]+b[i]+jw[i]) / jzb[i];
	}
	if(jw[maxlen] != 0){
    
    
		res[maxlen] = jw[maxlen];
	}
	int flag = 0;
	for(int i=s1.size(); i>=0; i--){
    
    
		if(res[i] != 0){
    
    
			for(int j=i; j>=0; j--){
    
    
				printf("%d", res[j]);
			}
			flag = 1;
			break;
		}
	}
	if(!flag){
    
    
		printf("0");
	}
	
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_45964844/article/details/113893096