又是高精系列题,这个题是高精数除以低精数的题,是高精系列题中最简单的。
题目描述
见https://www.luogu.com.cn/problem/P1480。
整体思路
模拟除法竖式,没啥好说的。
唯一需要注意的点:去除前导零,可以建立一个初始值为false的布尔变量,当它为false时不输出,直到遇到非零数之后变为true。
代码展示
拒绝抄袭,共创和谐社会[机智]
#include <iostream> // std::cin, std::cout, std::endl #include <string> // std::string using namespace std; int main(void) { bool noZero = false; // 上文所述的标志变量 int aNum = 0, ans = 0, b = 0, rem = 0; string aStr; cin >> aStr >> b; for (int i = 0; i < aStr.size(); i++) // 遍历每一位 { aNum = aStr[i] - '0'; // 将当前位转换为数字 rem = rem * 10 + aNum; // 加上上一位的余数×10 ans = rem / b; // 除 rem %= b; // 取余 if (noZero || ans) // 当noZero=true时,或当前位不等于0 { noZero = true; // 当前位已经不等于0了,不可能存在前导零 cout << ans; // 输出 } } cout << endl; return 0; }
写在最后
又完成了一题呢\(^o^)/YES!