[High Accuracy] banda B Planet

[High Accuracy] banda B Planet

título

tema de fondo

ary título, sino también una calculadora ~ ~

título Descripción

Diciendo que un día, una pequeña nave espacial Z, vuela a un hermoso planeta. Por razones históricas, la tecnología no está muy bien desarrollado en este hermoso planeta, el planeta uso generalizado de B (2 <= B <= 36) contador binario. La gente en el planeta con la deliciosa comida que se sirve pequeña Z, a cambio, quieren enviar un pequeño Z B puede completar calculadora sumador binario a ellos. Z es ahora pocas esperanzas que le puede ayudar, preparado para lograr programa de serpiente B binario.

Formato de entrada

3 líneas Línea 1: un entero decimal, indica hexadecimal B. Líneas 2-3: cada línea de un B decimal entero positivo. Cada número pertenece a {0,1,2,3,4,5,6,7,8,9, A, B ......}, cada longitud de dígitos <= 2,000.

Formato de salida

Un número binario de B, y representa los dos números de entrada.

entrada y salida de la muestra

Entrada # 1 de replicación
. 4
123
321
la salida de la copia # 1
1110
Descripción / pronta
calculadora hexadecimal

análisis

Este problema es también el título de gran precisión.
Con la primera cadena de datos de lectura, (porque hay un número de datos y letras), luego se convierte en el número correspondiente almacenado en la matriz (en este caso, [con] a, b [])
y la adición hecho con gran precisión.
Varios puntos ** Nota: ** También se observa que el sumador de alta precisión diaria
1 si n es mayor que la más alta representación decimal poco, entonces puede llevar adelante
2 para evitar que el bit más significativo es 0
3 de salida, se observa desde la parte trasera y también mayor que 10 letras en correspondientes

Específicamente mirar el código. . . . . .

código

#include<iostream>

using namespace std;

const int maxn = 20000;
int n;
string x,y;
int a[maxn],b[maxn],c[maxn];

int main(){
	cin>>n;
	cin>>x>>y;
	//读数据,存放 
	int lena = x.size();
	int lenb = y.size();
	for(int i=0;i<lena;i++){
		if(x[i] >='0' &&x[i] <='9')		a[lena -i] = x[i] -'0';
		else if(x[i] >='A' && n>=10) a[lena-i] = x[i] -'A'+10; 
	}
	for(int i=0;i<lenb;i++){
		if(y[i] >='0' &&y[i] <='9')		b[lenb -i] = y[i] -'0';
		else if(y[i] >='A' && n>=10) b[lenb-i] = y[i] -'A'+10; 
	}
//ps:下面换成这样写也可以 
//int lenc=0;
//	int cf=0;
//	while(lenc <=lena || lenc <=lenb){
//		lenc++;
//		c[lenc] = a[lenc] +b[lenc]+cf;
//		cf =c[lenc]/n;
//		c[lenc] %= n;
//	}
//	while(c[lenc]==0 && lenc >1){
//		lenc--;
//	}
//	for(int i=lenc;i>=1;i--){
//		if(c[i]>=10){
//			cout<<(char)(c[i] +'A' -10);
//		}else{
//			cout<<c[i];
//		}
//	} 	

//取最长长度,做高精加法 
	int maxlen = max(lena,lenb); 
	for(int i=1;i<=maxlen;i++){
		c[i] += a[i] + b[i];
		c[i+1] = c[i]/n;
		c[i] %= n;
	}
	maxlen++;
	//如果最高位大于n进制,表示可以向前再进位 
	while(c[maxlen] >=n){
		c[maxlen+1] = c[maxlen]/n;
		c[maxlen] %= n;
		maxlen++; 
	}
	//以防 最高位是 0的情况 
	while(c[maxlen]==0 && maxlen >1){
		maxlen--;
	}
	//输出,注意是从后往前,然后大于10还要转换成对应字母 
	for(int i=maxlen;i>=1;i--){
		if(c[i]>=10){
			cout<<(char)(c[i] +'A' -10);
		}else{
			cout<<c[i];
		}
	} 
	
	return 0;
}
Publicado 75 artículos originales · ganado elogios 1 · vistas 3632

Supongo que te gusta

Origin blog.csdn.net/A793488316/article/details/104832689
Recomendado
Clasificación