PTA|【PTA乙级】【1101 B是A的多少倍 (15 分)】

2022年3月6日22:43:57
文章目录

  • 2022年3月6日22:43:57
  • 1101 B是A的多少倍 (15 分)
    • 1.【题目描述】
    • 2.【题解】
    • 3.【补充知识】
      • 1. substr ;
      • 2.字符串转数字&&数字转字符串;
        • 函数实现
        • 使用流实现

1101 B是A的多少倍 (15 分) 1.【题目描述】 题目链接
设一个数A A A 的最低D D D 位形成的数是a d a_d ad? 。如果把a d a_d ad? 截下来移到A A A 的最高位前面,就形成了一个新的数B B B。 B B B 是A A A 的多少倍?
例如将 12345 的最低 2 位 45 截下来放到 123 的前面,就得到 45123,它约是 12345 的 3.66 倍。
输入格式:
输入在一行中给出一个正整数A A A( ≤ 1 0 9 ≤10^9 ≤109)和要截取的位数D D D。题目保证D D D 不超过A A A 的总位数。
输出格式:
计算B B B 是A A A 的多少倍,输出小数点后 2 位。
2.【题解】
  1. 利用字符串根据题意进行截断和拼接;
  2. 截断:用substr()进行截断初始字符串的某部分;
  3. 拼接:利用string+拼接字符串;
  4. 字符串转数字进行运算。
void solve(){ string s,s1,s2; cin >> s; int n; cin >> n; s1 = s.substr(s.size() - n , n); s2 = s.substr(0, s.size() - n); s1 += s2; int m = stoi(s1); int k = stoi(s); double b = m * 1.0 / k; printf("%.2lf\n", b); }

3.【补充知识】 1. substr ;
s.substr(pos, len);

返回值: string,包含s中从 pos 开始的 len 个字符的拷贝
pos 的默认值是 0len 的默认值是 s.size() - pos ,即不加参数会默认拷贝整个 s
异常 :若 pos 的值超过了string的大小,则substr函数会抛出一个out_of_range异常;若pos+n的值超过了string的大小,则substr会调整n的值,只拷贝到string的末尾
2.字符串转数字&&数字转字符串;
函数实现 一、stoi() 将字符串转换为 int
二、stoll() 将字符串转换为long long
三、stof() 将字符串转换为float
四、stod() 将字符串转换为double
五、to_string()将数字转换为string
使用流实现 数字类型转为string字符串
#include using namespace std; int main(){ int n = 123; stringstream ss; string str; ss << n; ss >> str; cout << str; return 0; }

【PTA|【PTA乙级】【1101 B是A的多少倍 (15 分)】】string字符串转为数字类型
#include using namespace std; int main(){ string str = "123"; stringstream ss; int num; ss << str; ss >> num; cout << num; return 0; }

    推荐阅读