标签:出现 tps lse cin http 大于 开始 erase href
题目地址:https://pintia.cn/problem-sets/994805260223102976/problems/994805305181847552
本题要求计算 A/B,其中 A 是不超过 1000 位的正整数,B 是 1 位正整数。你需要输出商数 Q 和余数 R,使得 A=B×Q+R 成立。
输入在一行中依次给出 A 和 B,中间以 1 空格分隔。
在一行中依次输出 Q 和 R,中间以 1 空格分隔。
123456789050987654321 7
17636684150141093474 3
A为不超过1000位的正整数,不是不超过1000,是1000位。用string存储,B是一位正整数,short即可。好像是大整数的除法问题的简化,除数只有一位,循环遍历A,将A中的字符转化为数值进行计算,将每次的商转化为字符串拼接,每次的余数参与下一次的被除数。两点注意。
#include <iostream>
#include <string>
using namespace std;
int main() {
string A;
string Q = "";
// 被除数
int m;
// 除数
short n;
// 商
int p = 0;
// 余数
int q = 0;
cin >> A >> n;
int limit = A.length();
string::size_type sz;
for (int i = 0; i < limit; i++) {
// 被除数
if (q == 0) {
// 字符转数字
m = (int)(A[i] - '0');
} else {
string temp = to_string(q).append(to_string(A[i] - '0'));
m = stoi(temp, &sz);
}
p = m / n;
q = m % n;
Q.append(to_string(p));
}
// 处理商前面可能出现0的情况,以及避免商仅为0,例如 3 / 7
if (Q.find_first_of('0') == 0 && Q.length() > 1) {
Q.erase(0, 1);
}
cout << Q << " " << q << endl;
}
to_string()
的时候,怎么也没有想到to_string(‘1‘)
的返回值竟然会是其对应的ASCCI码值——49,难搞哦。既然是ASCCI码值,那就按照ASCCI码来计算吧,减去‘0’的值,即可与预期相符。标签:出现 tps lse cin http 大于 开始 erase href
原文地址:https://www.cnblogs.com/another-7/p/12150519.html