PAT B1074 Víbora invencible del universo (20 puntos)

Inserte la descripción de la imagen aquí
Mi enfoque es usar una cadena para guardar el número de entrada primero y luego guardar los caracteres numéricos en la cadena en la matriz int para facilitar el cálculo.
Puntos de nota
Punto de prueba 1, 3: el resultado final puede exceder el número de dígitos N
Punto de prueba 5: Salida de juicio especial cuando la suma es 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;
}

Supongo que te gusta

Origin blog.csdn.net/weixin_45964844/article/details/113893096
Recomendado
Clasificación