2022年3月6日22:43:57
文章目录
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.【题解】
- 利用字符串根据题意进行截断和拼接;
- 截断:用
substr()
进行截断初始字符串的某部分; - 拼接:利用
string
用+
拼接字符串; - 字符串转数字进行运算。
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
的默认值是 0
,len
的默认值是 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<bits/stdc++.h>
using namespace std;
int main(){
int n = 123;
stringstream ss;
string str;
ss << n;
ss >> str;
cout << str;
return 0;
}
string字符串转为数字类型
#include<bits/stdc++.h>
using namespace std;
int main(){
string str = "123";
stringstream ss;
int num;
ss << str;
ss >> num;
cout << num;
return 0;
}