#include<cstdio> #include<vector> #include<string> #include<iostream> usingnamespacestd; // C = A * b,A >= 0,b >= 0 vector<int> mul(vector<int> &A,int b){ vector<int> C; for (int i = 0,t = 0;i < A.size() || t;i++){ // 循环退出条件相比加法多了|| t,就不用额外判断最后的进位 t += A[i]*b; // 理论上最好加上 if (i < A.size()) 判断,但是C++对数组越界检查不严格 C.push_back(t % 10); t /= 10; } // 去除前导零 while (C.size() > 1 && C.back() == 0) C.pop_back(); return C; }
intmain(){ vector<int> A; int b; string a; cin >> a >> b; for (int i = a.size()-1;i >= 0;i--) A.push_back(a[i] - '0'); auto C = mul(A,b); for (int i = C.size()-1;i >= 0;i--) printf("%d",C[i]); return0; }
#include<cstdio> #include<vector> #include<string> #include<iostream> #include<algorithm> usingnamespacestd; // A / b = C ... r,A >= 0,b > 0 vector<int> div(vector<int> &A,int b,int &r){ vector<int> C; // 注意:除法是从高位开始计算的,和加减乘法不一样 for (int i = A.size()-1;i >= 0;i--){ r = r*10 + A[i]; C.push_back(r / b); r %= b; } reverse(C.begin(),C.end());// 计算得到的商是正着的,需要翻转一下低位从0开始 // 因为C++的vector只能从back插入删除 // 去除前导零 while (C.size() > 1 && C.back() == 0) C.pop_back(); return C; }
intmain(){ vector<int> A; int b; string a; cin >> a >> b; for (int i = a.size()-1;i >= 0;i--) A.push_back(a[i] - '0'); int r = 0; auto C = div(A,b,r); for (int i = C.size()-1;i >= 0;i--) printf("%d",C[i]); puts(""); printf("%d",r); return0; }