目录
1.小写字母与大写字母的转换
2.使用string(额外开一章持续补充)
i.访问字符串最后一位
3.保留N位小数输出
i.C++侧
ii.C语言侧
iii.总结
4.高精度相加
i.各种数据类型转字符型
ii.三元运算符
iii.循环条件中的carry
1.小写字母与大写字母的转换
大写从65开始,小写从97开始,之间差了32.
输入小写,输出大写:
#include<iostream>
using namespace std;
int main()
{
char a;
cin >> a;
a = a - 32;
cout << a;
return 0;
}
2.使用string(额外开一章持续补充)
i.访问字符串最后一位
此处,只写刷题时遇到的
//需要的库
#include <string>
//定义
string s;
//获取长度
int len = s.length();
s.length()获取s 中,有多少字符,是实际长度。
在长度未知的情况下,可通过s[len - 1] 访问s 的最后一个字符(len取自上文代码的变量)。
值得注意的一个很简单但一忽略的点,当需要键盘输入string时,对string进行操作的函数一定要写在输入之后,
int main()
{
string s;
cin >> s;
//输入之后,再操作
int len = s.length();
}
3.保留N位小数输出
i.C++侧
需要<iomainip>库,
#include <iomanip>
double t = 9;
cout << t << endl;
cout << fixed << setprecision(3) << t << endl;
输出结果应该是:
9
9.000
其中,cout << fixed,会让之后输出的所有东西都变为浮点型,注意是所有。
之后,cout << setprecision(N),设置输出的浮点型小数点后保留几位,这个的影响也是所有。(precision的意思是精度)
拓:解除fixed 的设置,只需要插入代码,cout << defaultfloat; 即可。
拓:关于整型的多位输出,可以回顾蓝桥杯-洛谷刷题-day1(C++)
ii.C语言侧
double x;
printf("%.3f", x);
iii.总结
C++的更安全,不易报错,C语言的更直接。
4.高精度相加
#include <iostream>
#include <iomanip> //操纵器,个位数字,多位输出;保留n位小数输出
#include <cmath> //向上取整函数ceil
#include <string>
using namespace std;
//大数字计算,运用字符,从末尾开始加,超过10的,只取个位进行拼接,暂存十位进入下一个循环
string Add(string a, string b)
{
string result;
//两串的末尾指针
int i = a.length() - 1;
int j = b.length() - 1;
//暂存十位
int carry = 0;
//用循环分别逐个取出字符,转换类型,进行加减
while (i >= 0 || j >= 0 || carry > 0) //有一个真就会循环,当carry不为零时,说明有多出来的十位,需要再运算
{
int digitA = (i >= 0) ? a[i] - '0' : 0;
int digitB = (j >= 0) ? b[j] - '0' : 0;
int sum = digitA + digitB + carry;
//转为字符型,保留个位
result = to_string(sum % 10) + result;
//保留十位
carry = sum / 10;
i--;
j--;
}
return result;
}
int main()
{
string a, b;
cin >> a >> b;
cout << Add(a, b);
return 0;
}
C++ 中大数字相加是个很复杂的过程,需要借助字符型来实现,
i.各种数据类型转字符型
to_string() 函数
ii.三元运算符
有效简化代码,当循环中,有两种递减或递增指标,且两个指标的大小不同,会出现一个优先到达极限时,三元运算符,可以持续调整达到极限后的指标带来的负面影响,太妙了。
iii.循环条件中的carry
真正地考虑到多出来的十位的具体处理,对多余项的认真处理。