B进制加法(洛谷1604)

分析:码农题,照这模拟就行,高精度的B进制,注意字符串反转的技巧。

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <string>
 5 #include <vector>
 6 #include <algorithm>
 7 #include <set>
 8 #include <map>
 9 #include <bitset>
10 #include <cmath>
11 #include <queue>
12 #include <stack>
13 using namespace std;
14 const int maxn=2200;
15 char s[]={‘0‘,‘1‘,‘2‘,‘3‘,‘4‘,‘5‘,‘6‘,‘7‘,‘8‘,‘9‘,‘A‘,‘B‘,‘C‘,‘D‘,‘E‘,‘F‘,‘G‘,‘H‘,‘I‘,‘J‘,‘K‘,‘L‘,‘M‘,‘N‘,‘O‘,‘P‘,‘Q‘,‘R‘,‘S‘,‘T‘,‘U‘,‘V‘,‘W‘,‘X‘,‘Y‘,‘Z‘};
16 int n; //进制
17 int vis1[maxn],vis2[maxn];
18 int ans[maxn];
19 int main()
20 {
21     while(cin>>n)
22     {
23         string a,b;
24         cin>>a;
25         cin>>b;
26         memset(vis1,0,sizeof(vis1));
27         memset(vis2,0,sizeof(vis2));
28         int len1=a.length();  //反转第一个串
29         for(int i=0;i<len1/2;i++){
30             char temp=a[i];
31             a[i]=a[len1-1-i];
32             a[len1-1-i]=temp;
33         }
34         for(int i=0;i<len1;i++){
35             int pos;
36             for(int j=0;j<36;j++){
37                 if(a[i]==s[j]){
38                     pos=j; break;
39                 }
40             }
41             vis1[i]=pos;
42         }
43         int len2=b.length();   //反转第二个串
44         for(int i=0;i<len2/2;i++){
45             char tt=b[i];
46             b[i]=b[len2-i-1];
47             b[len2-1-i]=tt;
48         }
49         for(int i=0;i<len2;i++){
50             int pos;
51             for(int j=0;j<36;++j){
52                 if(b[i]==s[j]){
53                     pos=j; break;
54                 }
55             }
56             vis2[i]=pos;
57         }
58         int mx=max(len1,len2);
59         int cnt=0;
60         for(int i=0;i<mx;i++){
61             int temp=vis1[i]+vis2[i]+cnt;
62             if(temp>=n){
63                 cnt=1;
64                 ans[i]+=temp%n;
65             }else{
66                 cnt=0;
67                 ans[i]+=temp;
68             }
69         }
70         if(cnt==1){
71             ans[mx]=1; ++mx;
72         }
73         string ss;
74         for(int i=0;i<mx;i++){
75             ss+=s[ans[i]];
76         }
77         for(int i=0;i<mx/2;i++){
78             char yy=ss[i];
79             ss[i]=ss[mx-i-1];
80             ss[mx-i-1]=yy;
81         }
82         cout<<ss<<endl;
83     }
84     return 0;
85 }

时间: 2024-10-05 20:27:54

B进制加法(洛谷1604)的相关文章

洛谷 P1604 B进制星球 高精度多进制加法

P1604 B进制星球 时空限制1s / 128MB 题目背景 进制题目,而且还是个计算器~~ 题目描述 话说有一天,小Z乘坐宇宙飞船,飞到一个美丽的星球.因为历史的原因,科技在这个美丽的星球上并不很发达,星球上人们普遍采用B(2<=B<=36)进制计数.星球上的人们用美味的食物招待了小Z,作为回报,小Z希望送一个能够完成B进制加法的计算器给他们. 现在小Z希望你可以帮助他,编写实现B进制加法的程序. 输入输出格式 输入格式: 共3行第1行:一个十进制的整数,表示进制B.第2-3行:每行一个B

HDU1720 A+B Coming (16进制加法)

16进制加法 1 #include<stdio.h> 2 int main() 3 { 4 int a,b; 5 while(scanf("%x %x",&a,&b)!=EOF) 6 { 7 printf("%d\n",a+b); 8 } 9 } HDU1720 A+B Coming (16进制加法),码迷,mamicode.com

ACM--26进制加法--HDOJ 2100--Lovekey--大数--字符串处理

HDOJ题目地址:传送门 Lovekey Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 7783    Accepted Submission(s): 2519 Problem Description XYZ-26进制数是一个每位都是大写字母的数字. A.B.C.-.X.Y.Z 分别依次代表一个0 ~ 25 的数字,一个 n 位的26

36进制加法

36进制由0-9,a-z,共36个字符表示,最小为’0’, ‘0’.'9’对应十进制的09,‘a’.'z’对应十进制的1035 例如: '1b' 换算成10进制等于 1 * 36^1 + 11 * 36^0 = 36 + 11 = 47 要求按照加法规则计算出任意两个36进制正整数的和 如:按照加法规则,计算'1b' + '2x' = '48' 要求: 不允许把36进制数字整体转为10进制数字,计算出10进制数字的相加结果再转回为36进制 思路按照十进制的加法方法,满36向前进一位 public

N进制加法

我是网络公司的一名普通程序员,英文名Steven,发音比较像“师弟”,自从入职培训自我介绍后,大家就称我为“二师弟”,我喜欢看科幻小说,也喜欢做梦,有一次梦到外星球,发现外星人使用的并非10进制/16进制等,有些星球居然使用N进制(据统计N都在2~35之间),现在我们将首先给您一个数字表示N进制,然后给出两个数字的字符串,请算出其求和结果并输出,如果输入不能正常计算则输出-1. 说明: 1:数字的字符串其中包括0-9和a-z(表示10-35). 2:所有的输入和输出都只会是小写字母或数字,不存在

4进制加法-C++实现-分类讨论

思路: 1. 分四类讨论 2. 得到加和减计算方法 3. 前导0删除与符号删除 #include<iostream> #include<string> #include<iomanip> using namespace std; // 输入4进制数格式判断 bool judge(string a) { int i = 0; if(a[i] == '-' || a[i] == '+') i++; if(a[i] == '0' && a.size()-1&g

python任意进制加法

#!/usr/bin/python import sys,time start = sys.argv[1] end = sys.argv[2] size = sys.argv[3] def add(start,end,size): def add1(number,size): number[-1] += 1 if number[-1] == size: del number[-1] if number == []: number.append(1) else: if number[-1] ==

用74LS90或74LS193设计24进制加法计数器,用数码管显示其结果

原文地址:https://www.cnblogs.com/chunk998/p/11824365.html

洛谷P1013 进制位

P1013 进制位 题目描述 著名科学家卢斯为了检查学生对进位制的理解,他给出了如下的一张加法表,表中的字母代表数字. 例如: + L K V E L L K V E K K V E KL V V E KL KK E E KL KK KV 其含义为: L+L=L,L+K=K,L+V=V,L+E=E K+L=K,K+K=V,K+V=E,K+E=KL …… E+E=KV 根据这些规则可推导出:L=0,K=1,V=2,E=3 同时可以确定该表表示的是4进制加法 //感谢lxylxy123456同学为本