分数 15
全屏浏览
切换布局
作者 刘利
单位 惠州学院
编写add函数,通过函数重载,实现对变量num,增加值n。num增加n的规则如下:
如果num和n都是数值,则num的值变为num+n。
如果num为字符,n为整数:如果num为大写或者小写字母,则加n后,如果超过最后一个字母z/Z,则从a/A开始继续增加。如果增加量为负数,结果小于a/A,则从z/Z开始继续。例如X+4,结果为B;a+(-1)结果为z,其他字符则不变,既不做加运算。
增加量n不超过整数范围。
输入格式:
输入两行,第1行为两个数值,第2行为1个字符,一个整数
输出格式:
结果为两行,第1行为数值增加结果,第2行为字符增加结果
输入样例1:
3.1 4
Q 10
输出样例1:
7.1
A
输入样例2:
5.5 1.01
&
输出样例2:
6.51
&
输入样例3:
-1 -10
a -2
输出样例3:
-11
y
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
栈限制
8192 KB
代码实现:这里介绍两种方法
#include<iostream>
using namespace std;
// 函数重载:处理两个 double 类型数相加
double add(double num, double n) {
return num + n;
}
// 函数重载:处理一个字符和一个整数相加
char add(char num, int n)
{
if (num >= 'a' && num <= 'z')
{ // 如果输入的字符是小写字母
n = n % 26; // 对整数 n 取余,以确保在26个字母范围内
int x = num + n; // 将字符按整数值加上偏移量 n
if (x >= 'a' && x <= 'z') // 如果计算后的字符仍在小写字母范围内
return x; // 返回新字符
if (x < 'a') { // 如果计算后的字符超出小写字母范围(向下越界)
int t = 'a' - x; // 计算超出部分
num = 'z' - t + 1; // 将字符回绕到 z 后 t 个位置
} else if (x > 'z') { // 如果计算后的字符超出小写字母范围(向上越界)
int t = x - 'z'; // 计算超出部分
num = 'a' + t - 1; // 将字符回绕到 a 后 t 个位置
}
return num; // 返回处理后的字符
} else if (num >= 'A' && num <= 'Z')
{ // 如果输入的字符是大写字母,同理处理
n = n % 26;
int x = num + n;
if (x >= 'A' && x <= 'Z')
return x;
if (x < 'A') {
int t = 'A' - x;
num = 'Z' - t + 1;
} else if (x > 'Z') {
int t = x - 'Z';
num = 'A' + t - 1;
}
return num;
}
else
return num; // 输入的字符不是字母,则直接返回原字符
}
int main()
{
double x,y;int z;
char s;
cin>>x>>y;
cin>>s>>z;
cout<<add(x,y)<<endl<<add(s,z);
}*/
//接下来是环形加密的方法
#include <iostream>
using namespace std;
// 函数重载:处理两个 double 类型数相加
double add(double num, double n) {
return num + n;
}
// 环形加密函数:处理一个字符和一个整数相加
char add(char ch, int shift)
{
if (isalpha(ch))
{ // 判断是否为字母
char base = islower(ch) ? 'a' : 'A'; // 确定字母的基准值
int ot = ((ch - base) + shift) % 26; // 计算偏移量并取余
if (ot < 0) {
return base + 26 + ot; // 处理负偏移量
} else {
return base + ot; // 处理正偏移量
}
}
return ch; // 非字母直接返回原字符
}
int main() {
double x, y;
int z;
char s;
cin >> x >> y; // 输入两个 double 类型的数
cin >> s >> z; // 输入一个字符和一个整数
cout << add(x, y) << endl; // 输出两个 double 类型数的相加结果
cout << add(s, z) << endl; // 输出一个字符和一个整数的环形加密结果
return 0;
}