[Haute précision] bande B Planète

[Haute précision] bande B Planète

titre

fond du sujet

titre Ary, mais aussi une calculatrice ~ ~

Titre description

Dire qu'un jour, un petit vaisseau spatial Z, voler à une belle planète. Pour des raisons historiques, la technologie ne sont pas très bien développé sur cette belle planète, la planète utilisation généralisée de B (2 <= B <= 36) compteur binaire. Les gens sur la planète avec la nourriture délicieuse servie petite Z, en retour, veulent envoyer un petit Z B peut compléter calculatrice additionneur binaire pour eux. Z est maintenant peu d'espoir que vous pouvez l'aider, prêt à réaliser le programme binaire additionneur B.

Format d'entrée

3 lignes Ligne 1: un entier décimal, indique B. hexadécimal Lignes 2-3: chaque ligne B décimal entier positif. Chaque numéro appartient à {0,1,2,3,4,5,6,7,8,9, A, B ......}, chaque longueur de chiffres <= 2000.

Format de sortie

Un nombre binaire B, et représente les deux nombres d'entrée.

l'entrée et la sortie d'échantillon

réplication d' entrée n ° 1
. 4
123
321
la sortie copie # 1
1110
Description / rapide
calculatrice hexadécimale

analyse

Ce problème est également très précis titre.
Avec la première chaîne de données en lecture, (parce que les données chiffres et lettres), puis converti en nombre correspondant stocké dans le tableau (ici, [avec] a, b [])
et l'ajout fait avec une grande précision.
Plusieurs points ** Note: ** Il est également noté que sommateur de haute précision quotidienne
1 si n est supérieur à la représentation décimale binaire le plus élevé peut alors reporter
2 pour empêcher le bit le plus significatif est 0
3 sortie, est noté à l'arrière et aussi plus grand que 10 lettres correspondant dans

Plus précisément regarder le code. . . . . .

code

#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;
}
Publié 75 articles originaux · louange gagné 1 · vues 3632

Je suppose que tu aimes

Origine blog.csdn.net/A793488316/article/details/104832689
conseillé
Classement