【高精度】B进制星球

【高精度】B进制星球

题目

题目背景

进制题目,而且还是个计算器~~

题目描述

话说有一天,小Z乘坐宇宙飞船,飞到一个美丽的星球。因为历史的原因,科技在这个美丽的星球上并不很发达,星球上人们普遍采用B(2<=B<=36)进制计数。星球上的人们用美味的食物招待了小Z,作为回报,小Z希望送一个能够完成B进制加法的计算器给他们。 现在小Z希望你可以帮助他,编写实现B进制加法的程序。

输入格式

共3行第1行:一个十进制的整数,表示进制B。第2-3行:每行一个B进制数正整数。数字的每一位属于{0,1,2,3,4,5,6,7,8,9,A,B……},每个数字长度<=2000位。

输出格式

一个B进制数,表示输入的两个数的和。

输入输出样例

输入 #1 复制
4
123
321
输出 #1 复制
1110
说明/提示
进制计算器

分析

这题也是高精度题。
首先用string读入数据,(因为数据里有数字和字母),然后转换成对应数字 存放在数组里(这里用a【】,b【】)
然后做高精度加法。
**几个注意点:**这也是高精度加法的日常注意
1 如果最高位大于n进制,表示可以向前再进位
2 以防 最高位是 0的情况
3 输出,注意是从后往前,然后大于10还要转换成对应字母

具体看代码。。。。。。

代码

#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;
}
发布了75 篇原创文章 · 获赞 1 · 访问量 3632

猜你喜欢

转载自blog.csdn.net/A793488316/article/details/104832689
今日推荐