用vector存储大整数并重载运算符
#include#include #include using namespace std; //大整数 / 整数。处理负号,最高位存储正负数,遵循负负得正等原则处理 //当a比b大时,商是整数无需特殊处理; //当a比b小时,商是小数,输出“0.” //除数为0,则直接输出即可 vector operator / (vector a, int b){ int len = 0, temp = b; //记录b的长度,先比长度,再比大小 while(temp){ len++; temp/=10; } int flag = 0, p = pow(10,len-1); //记录商是否为整数、1或小数, 整数 =1,小数=-1 //进行负号的处理 if(a[a.size() - 1] * b < 0) cout << "-"; if(a[a.size() - 1] < 0) a[a.size() - 1] *= -1; if(b < 0) b *= -1; if(a.size() > len) flag = 1; //a比b大,商为整数 else if(a.size() == len){ //长度相等时 int temp = b; for(int i = a.size() - 1;i >= 0; --i, temp %= p, p/=10){ int cur = temp/p; if(a[i] > cur){//a比b大,跳出,商为整数 flag = 1; break; } else if(a[i] < cur){ flag = -1; break;//a比b小,进行处理 } } } vector ans; int rest = 0;//余数,计算时,每次将余数*10 for(int i = a.size() - 1; i >= 0; --i){ rest = rest * 10 + a[i]; ans.insert(ans.begin(), rest /b); //注意insert(iterator_pos,...) rest = rest % b; } //当商为整数时,需要消除先导0 if(flag >= 0){ for(int i = ans.size() - 1; ans[i] == 0 && i > 0; --i) ans.pop_back(); } //商为小数时,a << b,应当输出0,不应该输出0.000, else{ bool iszero = true; for(int i = 0; i < ans.size(); ++i) //从低位开始更容易发现有效数位 if(ans[i]){ iszero = false; break; } if(iszero){ ans.clear(); ans.push_back(0); } else cout << "0."; } return ans; } int main(){ vector a = {5,7,9,4}, ans; int b = 589; if(!b){ cout <<"INFn"; return 0; } ans = a/ b; for(int i = ans.size() - 1; i >= 0; --i) cout << ans[i]; return 0; }



