B进制星球(多进制 高精加)
https://www.luogu.org/problemnew/show/P1604
B(2<=B<=36)进制计数。编写实现B进制加法的程序。
输入输出格式
输入格式:
共3行第1行:一个十进制的整数,表示进制B。第2-3行:每行一个B进制数正整数。数字的每一位属于{0,1,2,3,4,5,6,7,8,9,A,B……},每个数字长度<=2000位。
输出格式:
一个B进制数,表示输入的两个数的和。
思路: 输入的时候把A~Z换成数字 存, 输出的时候把数字换成 A~Z 输出
1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<cstring> 5 #include<string> 6 #include<cmath> 7 #include<set> 8 #include<vector> 9 #include<stack> 10 #include<queue> 11 #include<map> 12 using namespace std; 13 #define ll long long 14 #define se second 15 #define fi first 16 const int INF= 0x3f3f3f3f; 17 const int N=4e6+5; 18 19 string s1,s2; 20 int n,len1,len2; 21 int a[4005],b[4005]; 22 23 int main() 24 { 25 cin>>n; 26 cin>>s1>>s2; 27 len1=s1.length(); 28 len2=s2.length(); 29 30 for(int i=1;i<=len1;i++) 31 { 32 if(s1[len1-i]>='A'){ 33 a[i]=s1[len1-i]-'A'+10; 34 } 35 else 36 a[i]=s1[len1-i]-'0'; 37 } 38 for(int i=1;i<=len2;i++) 39 { 40 if(s2[len2-i]>='A'){ 41 b[i]=s2[len2-i]-'A'+10; 42 } 43 else 44 b[i]=s2[len2-i]-'0'; 45 } 46 47 int len=max(len1,len2); 48 for(int i=1;i<=len;i++) 49 { 50 a[i+1] += (a[i]+b[i])/n; 51 a[i] =(a[i]+b[i])%n; 52 } 53 if(a[len+1]) len++; 54 for(int i=len;i>=1;i--) 55 { 56 if(a[i]>=10) printf("%c",a[i]-10+'A'); 57 else cout<<a[i]; 58 } 59 }