P1604 B進(jìn)制星球
//高精度B進(jìn)制加法
//B屬于二到36
//每行一個(gè)B進(jìn)制數(shù)正整數(shù)。數(shù)字的每一位屬于{0,1,2,3,4,5,6,7,8,9,A,B……},每個(gè)數(shù)字長(zhǎng)度<=2000位。
#include<bits/stdc++.h>
using namespace std;
string x,y;
int a[10000],b[10000],c[10000],la,lb,lc;//申明全局變量是自動(dòng)設(shè)置為全零
int B;
int main() {
? ?cin >> B;
? ?cin >> x >> y;
? ?la = x.length();
? ?lb = y.length();
? ?for (int i = 0; i < la; i++)
? ?{
? ? ? ?//需要判斷是數(shù)字則減去零的ASCII值是字母要減去A的ASCII值
? ? ? ?//注意有一個(gè)很重要的問(wèn)題:如果一個(gè)字符的ascii值是大寫字母的ascii值那么他也一定大于數(shù)字字符的ascii值
? ? ? ?//字符字母的ascii值是大于字符數(shù)字的ascii值的
? ? ? ?if (x[i] >='A' && x[i] <= 'Z')
? ? ? ?{
? ? ? ? ? ?a[la - i] = x[i] - 'A' + 10;//B進(jìn)制中十代表的是A
? ? ? ?}
? ? ? ?else
? ? ? ? ? ?a[la - i] = x[i] - '0';
? ?}
? ?for (int i = 0; i < lb; i++)
? ?{
? ? ? ?if (y[i] >= 'A' && y[i] <= 'Z')
? ? ? ?{
? ? ? ? ? ?b[lb - i] = y[i] - 'A' + 10;
? ? ? ?}
? ? ? ?else
? ? ? ? ? ?b[lb - i] = y[i] - '0';
? ?}
? ?//B進(jìn)制加法
? ?//結(jié)果的最大長(zhǎng)度?
? ?//考慮最極端的二進(jìn)制加法:1111+11111=101110即四位數(shù)加五位數(shù)最多就是六位數(shù)
? ?lc = max(la, lb);
? ?for (int i = 1; i <= lc; i++) {
? ? ? ?c[i] += a[i] + b[i];
? ? ? ?c[i + 1] += c[i] / B;//處理進(jìn)位信息
? ? ? ?c[i] = c[i] % B;//計(jì)算本位
? ?}
? ?//加法可能會(huì)導(dǎo)致位數(shù)增加由上面的二進(jìn)制加法可知
? ?if(c[lc+1]>0) lc++;
? ?for (int i = lc; i >= 1; i--)
? ?{
? ? ? ?//別忘了輸出也有問(wèn)題如果輸出的是一個(gè)大于十的數(shù)字
? ? ? ?if(c[i]>=10)
? ? ? ?{
? ? ? ? ? ?printf("%c",c[i]+'A'-10);
? ? ? ?}
? ? ? ?else
? ? ? ?{
? ? ? ? ? ?printf("%c",c[i]+'0');
? ? ? ?}
? ?}
? ?return 0;
}