网站开发建设计入什么科目,网站建设费进什么科目,建立网站需要做什么,wordpress更换域名批量替换题目链接#xff1a;P1480 A/B Problem - 洛谷
1.题目分析 1#xff1a;说明这里是高精度除以低精度的形式#xff0c;为什么不是高精度除以高精度的形式#xff0c;是因为它很少见#xff0c;它的模拟方式是用高精度减法来做的#xff0c;并不能用小学列竖式的方法模拟…题目链接P1480 A/B Problem - 洛谷
1.题目分析 1说明这里是高精度除以低精度的形式为什么不是高精度除以高精度的形式是因为它很少见它的模拟方式是用高精度减法来做的并不能用小学列竖式的方法模拟出来但是如果用高精度除低精度的话是可以用小学的方式模拟出来的并且是有可能遇到所以我们这里只了解高精度除以低精度就可以至于高精度除高精度大家感兴趣可以在网上搜一下
2.算法原理
解法:模拟列竖式计算的过程
用字符串读入第一个数拆分每一位逆序放在数组中利用数组模拟列竖式除法的过程 模拟一下小学列竖式除法过程比如1234除4最高位是11/45是除不尽的因此商00×4501-01拿余数1和后面的2拼接起来如何落实到代码可以创建一个变量t来记录余数1再让t×102就变成12了接下来用12/45的时候依旧是商0余12把它拼接成123的步骤和刚刚一样让12×103变成123接下来拿123/452×4590123-9033如何拿到商2和余数90呢当前的t123除45就可以拿到2模45就可以拿到33所以计算过程就是一直在重复t乘10加当前数、除除数、模除数、的步骤继续向后进行预算就可以了
有可能余数会超过int范围因为b的范围是是1e9级别的数让它乘10会变成1e10会超过整型范围所以使用long long来存储
代码
#include iostream
using namespace std;const int N 1e6 10;
typedef long long LL;int a[N], b, c[N]; //被除数、除数、结果
int la, lc;// 高精度除法的模板 - c a / b 高精度 / 低精度
void sub(int c[], int a[], int b)
{LL t 0; // 标记每次除完之后的余数//除的时候是拿最高位试除的for (int i la - 1; i 0; i--){// 计算当前的被除数t t * 10 a[i]; //拼接被除数 12*103123c[i] t / b; //拿商 123/452t % b; //取余数 123%4533}// 处理前导 0while (lc 1 c[lc - 1] 0) lc--;
}int main()
{string x; cin x b;la x.size();for (int i 0; i la; i) a[la - 1 - i] x[i] - 0;// 模拟除法的过程lc la;sub(c, a, b); // c a / bfor (int i lc - 1; i 0; i--) cout c[i];return 0;
}