目录
PAT甲级字符串相关题目题解
PAT1001(知识点:C++中to_string()
的用法)
#include <iostream>
using namespace std;
int main()
{
int x, y;
cin >> x >> y;
string sum_str = to_string(x + y);
string res = "";
for (int i = sum_str.size() - 1, j = 0; i >= 0; i--) // j用来存储当前已经遍历了几位
{
res = sum_str[i] + res;
j++;
if (j % 3 == 0 && i != 0 && sum_str[i - 1] != '-')
{
res = ',' + res;
}
}
cout << res;
}
PAT1005(知识点:for-each遍历、字符ASCII码、数据长度估算)
知识点:for-each遍历、字符ASCII码、数据长度估算
-
c - '0’可以得到字符对应的int值,如果直接输出c,输出的是这个数字字符的ASCII码值,易错点。
-
题目输入范围是 1 0 100 10^{100} 10100,而int的大小通常是32位,范围是 − 2 31 -2^{31} −231到 2 31 − 1 2^{31}-1 231−1,这里要估算一下 1 0 100 10^{100} 10100有没有超过int的范围,最后决定使用string存储输入值,而不是int(因为会越界)
python代码计算:
import math
# 计算2的31次方
power_of_two = 2 ** 31
# 转换为10的次方
power_of_ten = math.log10(power_of_two)
power_of_ten
要证明 (2^{31}) 约等于 (10^{9.33}) 的推理正确性,我们可以使用对数的换底公式来进行计算。换底公式是:
log b a = log c a log c b \log_b a = \frac{\log_c a}{\log_c b} logba=logcblogca
其中,(a) 和 (b) 是大于0的实数,(c) 是正实数且 (c \neq 1)。我们想要计算的是 (2^{31}) 用 (10) 的次方来表示,即求 (10) 的多少次方等于 (2^{31})。
根据对数的定义,我们可以将 (2^{31}) 表示为 (10) 的对数:
1 0 x = 2 31 10^x = 2^{31} 10x=231
取对数得:
x = log 10 ( 2 31 ) x = \log_{10} (2^{31}) x=log10(231)
使用换底公式,将底数从 (10) 改为 (2)(因为 (2) 和 (10) 的对数我们更容易理解和计算):
x = log 2 ( 2 31 ) log 2 ( 10 ) x = \frac{\log_2 (2^{31})}{\log_2 (10)} x=