PATB1113 钱串子的加法

ops/2025/3/19 12:28:51/

  • 传统题1000ms256MiB

人类习惯用 10 进制,可能因为大多数人类有 10 根手指头,可以用于计数。这个世界上有一种叫“钱串子”(学名“蚰蜒”)的生物,有 30 只细长的手/脚,在它们的世界里,数字应该是 30 进制的。本题就请你实现钱串子世界里的加法运算。

输入格式:

输入在一行中给出两个钱串子世界里的非负整数,其间以空格分隔。

所谓“钱串子世界里的整数”是一个 30 进制的数字,其数字 0 到 9 跟人类世界的整数一致,数字 10 到 29 用小写英文字母 a 到 t 顺次表示。

输入给出的两个整数都不超过105105位。

输出格式:

在一行中输出两个整数的和。注意结果数字不得有前导零。

输入样例:

2g50ttaq 0st9hk381

Copy

输出样例:

11feik2ir

 这题一开始思路想错了,因为以前写的都是进制转换,这题看到的本能就是先30进制数字转10进制数字,然后加起来再十进制转回三十进制

但是

因为一开始写了好几遍,怎么转都ac不了,我就对自己产生了严重的自我怀疑,我一开始以为是自己对题目的理解错了,又读了几遍题,觉得没理解错,然后我就在草稿纸上自己按三十进制直接对样例进行计算,就是这个时候,我突然就醍醐灌顶了

实际上这题不需要数字进行进制转换,只需要正确地把每一位(字符形式读)转换为它正确的数字模拟一下加法的过程就行

话不多说,上代码

#include<bits/stdc++.h>
#define ll long long
#define endl "\n";
using namespace std; 
int tn(char x)//to number 就是字符转数字
{if(x>='0'&&x<='9'){return x-'0';}return x-'a'+10;
}
int tc(int x) 同理,to char
{if(x>=0&&x<=9){return x+'0';}return x-10+'a';
}//转换中的以字符'a'为媒介的写法要好好学习,是一个很好用的小技巧
int main()
{string a,b;cin>>a>>b;reverse(a.begin(),a.end());reverse(b.begin(),b.end());//加法模拟,先倒置string temp;if(a.size()>b.size()){temp=a;a=b;b=temp;}//固定把a串调成位数较小的那个串vector<int> num;int len=b.size();for(int i=0;i<len;i++){if(i<a.size())//因为a串较短,所以要特判,不能越界了{num.push_back(tn(a[i])+tn(b[i]));}else{num.push_back(tn(b[i]));}}num.push_back(0);//提前补个0以供最后一位进位for(int i=0;i<num.size();i++){if(num[i]>=30){num[i+1]+=num[i]/30;num[i]%=30;}}string ans="";for(int i=0;i<num.size();i++){ans+=tc(num[i]);//转字符}reverse(ans.begin(),ans.end());!!!计算顺序是倒的,但是最后输出要倒回来int flag=1;for(int i=0;i<ans.size();i++){if(flag&&ans[i]=='0')//防止前导0{continue;}flag=0;cout<<ans[i];}if(flag) cout<<"0";//防止ans本身就是个'0'return 0;
}

果然写代码思维不能进死胡同,要多变通,对于我这比较笨的就是要平时多练了


http://www.ppmy.cn/ops/167023.html

相关文章

tf1.x和tf2.x在使用上的区别和联系是什么

tf1.x和tf2.x在使用上的区别和联系是什么 TensorFlow 1.x 和 2.x 在使用上有显著差异&#xff0c;主要体现在编程范式、API 设计和易用性上&#xff0c;但二者仍共享相同的核心目标&#xff08;深度学习框架&#xff09;和底层计算引擎。以下是主要区别和联系&#xff1a; 主要…

安卓开发调用本地接口以及设置base_url思路

去年接手pad端开发时曾问过其它组的老安卓一个问题&#xff0c;我们的安卓项目本地开发时能否调用本地接口&#xff0c;回答是否定的。也许是由于通用底座加入的限制&#xff0c;也许是因为太忙了&#xff0c;不想给我解释繁琐的解决方案。 那么在个人PC上玩耍总是能够调用本地…

C语言经典代码题

1.输入一个4位数&#xff1a;输出这个输的个位 十位 百位 千位 #include <stdio.h> int main(int argc, char const *argv[]) {int a;printf("输入一个&#xff14;位数&#xff1a;");scanf("%d",&a);printf("个位&#xff1a;%d\n"…

深度学习处理时间序列(2)

在数据中寻找周期性 在多个时间尺度上的周期性&#xff0c;是时间序列数据非常重要且常见的属性。无论是天气、商场停车位使用率、网站流量、杂货店销售额&#xff0c;还是健身追踪器记录的步数&#xff0c;你都会看到每日周期性和年度周期性&#xff08;人类生成的数据通常还…

王道数据结构6.3

顶点x的第一个邻接点以及下一个邻接点 int first_neighbor(Algraph G, int x){if(G.vertices[x].firstarc! nullptr){return G.vertices[x].firstarc->adjvex;}else return -1; }int next_neighbor(Algraph G,int x,int y){ArcNode *pG.vertices[x].firstarc;while(p! null…

C++笔记-类和对象(下)

1.再探构造函数 1.之前我们实现构造函数时&#xff0c;初始化成员变量主要使用函数体内赋值&#xff0c;构造函数初始化还有一种方式&#xff0c;就是初始化列表&#xff0c;初始化列表的使用方式是以一个冒号开始&#xff0c;接着是一个以逗号分隔的数据成员列表&#xff0c;每…

微软OneNote无法同步解决方案

目录 前言原因UWP特性 解决方案C***h注册表 参考链接 前言 假设有多台Windows电脑&#xff0c;最方便且免费的多设备笔记同步方案就是微软自家的OneNote&#xff0c;使用OneDrive自带的5G云存储。 但是在国内大陆的OneNote&#xff0c;经常会出现无法同步、同步失败&#xff1…

解锁C++异常秘籍:自定义类与安全保障全解析

目录 一、C++ 异常处理初印象 二、探索 C++ 标准异常类 三、自定义异常类的构建与应用 3.1 自定义异常类的必要性 3.2 自定义异常类的实现步骤 3.3 实际应用场景 四、异常安全保证:守护代码的坚固防线 4.1 异常安全的重要性 4.2 异常安全的三个级别 4.3 实现异常安全…