本文主要是介绍B进制星球(洛谷-P1604),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目描述
话说有一天,小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
思路:高精度加法,与十进制不同的是,将进位改成n即可,此外注意>10时,A~Z的输入输出转换
源代码
#include<iostream>
#include<cstring>
using namespace std;
char str1[2000],str2[2000];
int a[2000],b[2000],c[2000];
int main()
{int n;int lena,lenb;int i;cin>>n;//读入进制cin>>str1>>str2;lena=strlen(str1);lenb=strlen(str2);for(i=0;i<lena;i++){if(str1[i]>='A'&&str1[i]<='Z')//A~Z读入的转换a[lena-i]=str1[i]-'A'+10;elsea[lena-i]=str1[i]-'0';}while(a[lena]==0&&lena>1)//去掉前导0lena--;a[0]=lena;for(i=0;i<lenb;i++){if(str2[i]>='A'&&str2[i]<='Z')//A~Z读入的转换b[lenb-i]=str2[i]-'A'+10;elseb[lenb-i]=str2[i]-'0';}while(b[lenb]==0&&lenb>1)//去掉前导0lenb--;b[0]=lenb;c[0]=a[0]>b[0]?a[0]:b[0];//确定数位int x=0;for(i=1;i<=c[0];i++){c[i]=a[i]+b[i]+x;x=c[i]/n;c[i]%=n;}if(x!=0){c[++c[0]]=x;x=0;}for(i=c[0];i>=1;i--){if(c[i]>=10)//>10时输出A~Zcout<<(char)(c[i]+55);else//输出数字cout<<c[i];}cout<<endl;return 0;
}
这篇关于B进制星球(洛谷-P1604)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!