织梦模板更新网站,注册网站送金币,wordpress首页排版错误,一网一平台是什么看到一个博主写得不错#xff0c;我也照猫画虎#xff1a;#xff09;
原因
在计算两个非负整数时#xff0c;如果位数很大#xff0c;连 long long 类型都存储不了#xff0c;就要使用到高精度的乘法
原理
原理依旧是模拟人计算两个数的积#xff0c;早在小学我们已…看到一个博主写得不错我也照猫画虎
原因
在计算两个非负整数时如果位数很大连 long long 类型都存储不了就要使用到高精度的乘法
原理
原理依旧是模拟人计算两个数的积早在小学我们已经学了竖式运算如图 你有没有从中发现什么个位与个位的乘积在积的个位上个位与十位的乘积在积的十位上……我们先将所有的乘积保存下来用一个数组保存然后对它进行进位处理就可以得到结果。
另外结果的长度是多少呢可以从上图得出不管怎么样长度的基础是其中一个数的长度另外一个数的长度是乘的次数第一次乘不会向左移所以最终的长度是数A 的长度 数 B的长度 - 1。
步骤 先将数 A 数 B 存储 再将 A、B 每一位的乘积用数组存储 然后对数组进行进位处理将结果放进答案动态数组 最后打印就好了 代码
#include iostream
#include vector
#include stringusing namespace std;int c[200]; //A和B的位数都小于100位存储着各个位上的乘积和vector int mul(vector int A, vector int B)
{vector int C;for (int i 0; i (int)A.size(); i){for (int j 0; j (int)B.size(); j){c[i j ] ( A[i] * B[j] ); // 下标从0开始注意下标}}int t 0; //表示进位for (int i 0; i (int)(A.size() B.size()) ; i) //结果的最大位数就是A.size() B.size() - 1{t c[i];C.push_back(t % 10);t / 10;}//我看到很多人的代码都有去前导0可是乘法好像不会出现这种情况return C;
}int main(void)
{string a, b;cin a b;vector int A, B;for (int i (int)a.size() - 1; i 0; i--) A.push_back(a[i] - 0); //逆序存储for (int i (int)b.size() - 1; i 0; i--) B.push_back(b[i] - 0);auto C mul(A, B);for (int i (int)C.size() - 1; i 0; i--) //逆序打印{cout C[i];}return 0;}