1113 钱串子的加法 python
"1113 钱串子的加法"通常是指在Python中处理以“元”(yuan)为单位的钱数时,因为中国的货币表示习惯是千位分隔,例如1000元会写作"1,113"。如果你想要编写一个简单的函数来模拟这种钱数的加法,可以创建一个字符串处理函数,将逗号替换为空格,然后转换成整数进行相加,最后再将结果转换回字符串保持原格式。
下面是一个简单的例子:
def money_addition(money_str1, money_str2):
# 将逗号替换为分隔符,并转为整数
num1 = int(money_str1.replace(",", ""))
num2 = int(money_str2.replace(",", ""))
# 相加
total = num1 + num2
# 保留原格式,添加千位分隔符
result = "{:,}".format(total)
return result
# 测试
add_result = money_addition("1,113", "567")
print(f"加法结果是: {add_result}")
在这个函数中,"{:,}".format(total)
使用了 Python 的格式化字符串来插入逗号,确保在千位处添加分隔。
1113 钱串子的加法
题目描述
给定两个由数字字符组成的钱串子,即数字和字母 $S_1$ 和 $S_2$($S_1$ 和 $S_2$ 均不超过 $10^3$),请你写一个程序计算它们的和。
两个钱串子相加的规则如下:
- 每个钱串子中,从右到左的第 $i$ 位表示为 $S[i]$($i$ 从 $1$ 开始);
- 如果 $S$ 的某一位上是一个数字字符,那么这一位表示的数就是这个数字字符本身;
- 如果 $S$ 的某一位上是一个字母字符,那么这一位表示的数就是 $a$ 到 $z$ 的编号,即 $a$ 表示 $1$,$b$ 表示 $2$,以此类推;
- 相加时,从右到左,对应位上的数相加。如果相加结果小于 $10$,则直接将结果放在相应的位置上;如果相加结果大于等于 $10$,则将结果的个位数放在相应的位置上,同时将进位 $1$ 加到下一次相加的结果中;
- 如果最高位相加后产生了进位,则需要在最后输出时在最高位加上 $1$。
输入格式
共两行,每行一个字符串 $S_1$ 和 $S_2$。
输出格式
一个字符串,表示两个钱串子之和。
数据范围
$S_1$ 和 $S_2$ 均不超过 $10^3$
输入样例1:
932 541
输出样例1:
1473
输入样例2:
a12 b34
输出样例2:
147
算法
(字符串模拟) $O(n)$
时间复杂度
$O(n)$
C++ 代码
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
string a,b;
int main(){
cin>>a>>b;
int jin=0;
string res="";
reverse(a.begin(),a.end());
reverse(b.begin(),b.end());
for(int i=0;i<a.size()||i<b.size();i++){
int t=0;
if(i<a.size())t+=a[i]-'0';
if(i<b.size())t+=b[i]-'0';
t+=jin;
res+=to_string(t%10);
jin=t/10;
}
if(jin)res+='1';
reverse(res.begin(),res.end());
cout<<res<<endl;
return 0;
}
人类习惯用 10 进制,可能因为大多数人类有 10 根手指头,可以用于计数。这个世界上有一种叫“钱串子”(学名“蚰蜒”)的生物,有 30 只细长的手/脚,在它们的世界里,数字应该是 30 进制的。本题就请你实现钱串子世界里的加法运算。 输入格式: 输入在一行中给出两个钱串子世界里的非负整数,其间以空格分隔。 所谓“钱串子世界里的整数”是一个 30 进制的数字,其数字 0 到 9 跟人类世界的整数一致,数字 10 到 29 用小写英文字母 a 到 t 顺次表示。 输入给出的两个整数都不超过 10 5 位。 输出格式: 在一行中输出两个整数的和。注意结果数字不得有前导零。
#include
int main() { string a, b; cin >> a >> b; int lena = a.size(), lenb = b.size(); if (lena < lenb) { // 保证 a 的长度不小于 b swap(a, b); swap(lena, lenb); } int carry = 0; // 进位 for (int i = 1; i <= lena; i++) { int numa = (a[lena-i] >= '0' && a[lena-i] <= '9') ? a[lena-i]-'0' : a[lena-i]-'a'+10; int numb = 0; if (i <= lenb) { numb = (b[lenb-i] >= '0' && b[lenb-i] <= '9') ? b[lenb-i]-'0' : b[lenb-i]-'a'+10; } int sum = numa + numb + carry; carry = sum / 30; sum %= 30; if (i == lena && carry) { cout << carry; } else { cout << (char)(sum < 10 ? sum+'0' : sum-10+'a'); } } return 0; }
相关推荐













