SVG优化终极指南:使用SVGOMG实现前端性能效率革命

核心内容摘要

优化校园光环境:从照亮空间到专业护眼照明转变
AI净界RMBG-1.4:一键实现发丝级抠图,电商人像处理神器

Zuken CR-8000 Design Force新手入门:从原理图到PCB布局的完整工作流指南

高精度除法分为两种情况

高精度/低精度

高精度/高精度对于情况1高精度/低精度的思想首先定义两个long long 类型数据代表除数和余数在用字符串类型来接收被除数在定义两个数组分别是被除数数组和结果数组先把字符串当中的数据正序存储便于直接从高位开始除减少计算量之和遍历被除数数组结果数组某位的值等于被除数数组某位的值余数*10/除数同时需要更新余数等于被除数数组某位的值余数*10%除数遍历结束后即除完最后删去前导0 输出结果具体代码以及细节如下#includebits/stdc.h //万能头文件 using namespace std; long long b; //除数 long long x; //余数 int main() { string s; //被除数 cin s; cin b; vectorint vec(s.size()

; //被除数数组 vectorint vec2(s.size()

; //结果数组 for (int i 1; i s.size();i) { vec[i] s[i - 1]-0; //正序存储便于从高位除 } for (int i 1; i s.size();i) { vec2[i] (x * 10 vec[i]) / b; //某位的商等于上一位的余数*10本位数字/b x (x * 10 vec[i]) % b; //某位余数等于上一位的余数*10本位数字%b } int begin 1; while (vec2[begin]0begins.size()) { //删除前导0并且避免删除最后一个0 begin; } for (int i begin; i s.size();i) { //输出的时候i从begin开始避免输出前导0 cout vec2[i]; } }

高精度/高精度思想高精度/高精度的思想是把两个数相除的形式转换成两个数一直相减的过程直到被减数比无法减减数为止我们需要设置四个数组分别是被除数数组除数数组商数组和临时数组临时数组来存储除数数组经过偏移后的数组首先输入两字符利用这两个字符串给被除数数组和除数数组逆序赋值赋值的同时需要把数组的第一个元素设置为两数据的长度接着需要给商数组定义长度商数组最大的时候长度等于被除数的长度减去除数的长度加一之后通过补0的方式让除数和被除数的高位数字对齐保证从高位开始相减减少计算量接着进行判断当此时的被除数的大小比当前临时数组存储经过偏移低位补0的除数的数据大的时候进入while循环进行减法操作被除数比临时数组小的时候会直接进入第二次for循环从商数组的高位开始遍历一直到1结束进行下一次的偏移除数数组设置...等上面操作在减法操作中被除数减去临时数组的数据没减一次对应的商值需要加一同时需要将被除数更新为被除数-临时数组的值同时还要去除当前被除数的前导0当for循环结束的时候此时整体相除完毕需要去除商数组的前导0最后输出#includebits/stdc.h using namespace std; //给数组初始化 void init(vectorint vec) { //函数传参的时候需要 string s; cin s; vec[0] s.size(); //把数组下标是0的位置初始化为数组字符串对应的数据的长度 for (int i 0; i s.size();i) { vec[s.size() - i] s[i]-0; } } //n代表偏移量补0 /* 用已有的除数给临时数组tmp赋值并且给tmp低位赋值为0让他们高位对齐 相减会减少计算量 */ void numsBuffer(vectorint vec2,vectorint tmp,int n) { for (int i 1; i vec2[0];i) { tmp[n i] vec2[i]; tmp[0] vec2[0] n; //给临时数组下标是0的位置赋值为临时数组的大小 } } //比较函数比较当前被除数和当前临时数组当前除数的大小 bool compareNUms(vectorint vec1,vectorint tmp) { if (vec1[0]!tmp[0]) { //两数组长度不相等当被除数的长度大于除数长度返回true return vec1[0] tmp[0]; } for (int i vec1[0]; i 1;i--) { //两数组长度相等每个元素应该从数据的高位开始比较大小 if (vec1[i]!tmp[i]) { return vec1[i] tmp[i]; //某个元素不相等的时候当被除数数据大的时候返回true } } return true; //两数据一模一样返回true } //相减函数 void sub(vectorint vec1,vectorint tmp) { //因为当除数的长度大于被除数的时候进不去while循环所以执行当前函数被除数的长度一定大于除数长度 for (int i 1; i vec1[0];i) { if (vec1[i]tmp[i]) { vec1[i 1]--; vec1[i] 10; } vec1[i] - tmp[i];//两数相减完要更新被除数 } //删去前导0被除数的前导0 while (vec1[vec1[0]]0vec1[0]

{ //保证有余数 vec1[0]--; } } int main() { const long long len 1e5 10; vectorint vec1(len,

; //被除数数组 vectorint vec2(len,

; //除数数组 vectorint vec3(len,

; //商数组 vectorint tmp(len,

; //给除数数据偏移后的数组 //初始化被除数和 除数两数组 init(vec

; init(vec

; if (!compareNUms(vec1,vec

) { //处理被除数的长度小于除数的长度的情况 cout 0 endl; /*for (int i vec1[0]; i 1; i--) { //输出余数 cout vec1[i]; } */ return 0; } vec3[0] vec1[0] - vec2[0] 1; //商的长度 //利用减法模拟两数相除的过程从高位开始相减给除数的低位补0让他们高位对齐 for (int i vec3[0]; i 1;i--) { memset(tmp.data(),0,tmp.size()*sizeof(int)); //每次两数相减之和后需要重置临时数组偏移量不同 numsBuffer(vec2,tmp,i-

; //给临时数组赋值除数数组并低位补0 //只有当当前被除数大于临时数组的除数才会执行下面的相减函数否则直接跳过执行当前下一个大循环 while (compareNUms(vec1, tmp)) { //相减函数 sub(vec1, tmp); vec3[i]; //执行一次while循环相当于被除数减去一次除数对应位置的商需要加一 } } //删去前导0商数组的前导0 while (vec3[vec3[0]] 0 vec3[0]

{ vec3[0]--; } //输出商值 for (int i vec3[0]; i 1; i--) { cout vec3[i]; } coutendl; /*for (int i vec1[0]; i 1; i--) { //输出余数 cout vec1[i]; } */ }

阴斗-阴斗应用

百度百家号客服电话人工服务

123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123