yldjdp>using namespace std;yldjd/p> y" /> yldjdp>using namespace std;yldjd/p> y" />
首页 > 编程知识 正文

c语言算术表达式的计算解析,c语言基础

时间:2023-05-04 23:24:32 阅读:50861 作者:2742

yldjdp>#include "string"yldjd/p> yldjdp>using namespace std;yldjd/p> yldjdp>class BigInteger{yldjd/p> yldjdp>private:yldjd/p> yldjdp>string s;yldjd/p> yldjdp>string subtraction(string s1, string s2){yldjd/p> yldjdp>if (s1 == s2)yldjd/p> yldjdp>return "0";yldjd/p> yldjdp>while (s1.length() < s2.length())yldjd/p> yldjdpdddmb = '0' + s1;yldjd/p> yldjdp>while (s2.length() < s1.length())yldjd/p> yldjdp>s2 = '0' + s2;yldjd/p> yldjdpdddmb = '0' + s1;yldjd/p> yldjdp>s2 = '0' + s2;yldjd/p> yldjdp>for (size_t i = 1; i < s1.length(); i++){yldjd/p> yldjdp>if (s1[i] > s2[i])yldjd/p> yldjdpxqdkni] = s1[i] - s2[izjdss '0';yldjd/p> yldjdp>else{yldjd/p> yldjdpxqdkni] = s1[izjdss 10 - s2[izjdss '0';yldjd/p> yldjdpxqdkni - 1]--;yldjd/p> yldjdp>}yldjd/p> yldjdp>}yldjd/p> yldjdp>return clearZero(s1);yldjd/p> yldjdp>return s1;yldjd/p> yldjdp>}yldjd/p> yldjdp>void strToInt(int *a, string b){ //b = "1234" then a = {4,3,2,1}yldjd/p> yldjdp>int length = b.length();yldjd/p> yldjdp>for (int i = 0; i < length; i++){yldjd/p> yldjdp>a[length - i - 1] = b[i] - '0';yldjd/p> yldjdp>}yldjd/p> yldjdp>}yldjd/p> yldjdp>string intToStr(int *a, int length){yldjd/p> yldjdp>string b;yldjd/p> yldjdp>for (int i = 0; i < length; i++){yldjd/p> yldjdp>b = char(a[izjdss '0') + b;yldjd/p> yldjdp>}yldjd/p> yldjdp>return b;yldjd/p> yldjdp>}yldjd/p> yldjdp>//清楚数字开头多余的0yldjd/p> yldjdp>string clearZero(string a){yldjd/p> yldjdp>while (a.size() > 1 && a[0] == '0')yldjd/p> yldjdp>a.erase(a.begin());yldjd/p> yldjdp>return a;yldjd/p> yldjdp>}yldjd/p> yldjdp>//比较两个字符串的大小yldjd/p> yldjdp>bool Compare(string first, string second){yldjd/p> yldjdp>first = clearZero(first);yldjd/p> yldjdp>second = clearZero(second);yldjd/p> yldjdp>if (first.size() < second.size())yldjd/p> yldjdp>return false;yldjd/p> yldjdp>if (first.size() == second.size() && first < second)yldjd/p> yldjdp>return false;yldjd/p> yldjdp>return true;yldjd/p> yldjdp>}yldjd/p> yldjdp>public:yldjd/p> yldjdp乐观的龙猫(){yldjd/p> yldjdp>s = "";yldjd/p> yldjdp>}yldjd/p> yldjdp乐观的龙猫(string a) :s(a){}yldjd/p> yldjdp>void setInteger(string integer){yldjd/p> yldjdp>this->s = integer;yldjd/p> yldjdp>}yldjd/p> yldjdp>string getInteger(){yldjd/p> yldjdp>return this->s;yldjd/p> yldjdp>}yldjd/p> yldjdp乐观的龙猫 operator+(const BigInteger& other){yldjd/p> yldjdp>string s2 = other.s;yldjd/p> yldjdp>string s1 = this->s;yldjd/p> yldjdp>while (s1.length() < s2.length())yldjd/p> yldjdpdddmb = '0' + s1;yldjd/p> yldjdp>while (s1.length() > s2.length())yldjd/p> yldjdp>s2 = '0' + s2;yldjd/p> yldjdpdddmb = '0' + s1;yldjd/p> yldjdp>s2 = '0' + s2;yldjd/p> yldjdp>for (int i = s1.length() - 1; i > 0; i--){yldjd/p> yldjdpxqdkni] = s1[izjdss s2[i] - '0';yldjd/p> yldjdp>if (s1[i] > '9'){yldjd/p> yldjdpxqdkni] -= 10;yldjd/p> yldjdpxqdkni - 1zjdss= 1;yldjd/p> yldjdp>}yldjd/p> yldjdp>}yldjd/p> yldjdp>return clearZero(s1);yldjd/p> yldjdp>}yldjd/p> yldjdp乐观的龙猫 operator-(const BigInteger& other){yldjd/p> yldjdp>string s2 = clearZero(other.s);yldjd/p> yldjdp>string s1 = clearZero(this->s);yldjd/p> yldjdp>if (s1 == s2)yldjd/p> yldjdp>return "0";yldjd/p> yldjdp>else if (s1.length() > s2.length()){yldjd/p> yldjdp>return subtraction(s1, s2);yldjd/p> yldjdp>}yldjd/p> yldjdp>else if (s1.length() < s2.length()){yldjd/p> yldjdp>return '-' + subtraction(s2, s1);yldjd/p> yldjdp>}yldjd/p> yldjdp>else if (s1 > s2){yldjd/p> yldjdp>return subtraction(s1, s2);yldjd/p> yldjdp>}yldjd/p> yldjdp>else{yldjd/p> yldjdp>return '-' + subtraction(s2, s1);yldjd/p> yldjdp>}yldjd/p> yldjdp>}yldjd/p> yldjdp乐观的龙猫 operator*(const BigInteger& other){yldjd/p> yldjdp>string s1 = this->s;yldjd/p> yldjdp>string s2 = other.s;yldjd/p> yldjdp>const int MAX = 100;yldjd/p> yldjdp>int a[MAX]; //保存操作数1yldjd/p> yldjdp>int b[MAX]; //保存操作数2yldjd/p> yldjdp>int c[MAX]; //保存计算结果yldjd/p> yldjdp>memset(a, 0, sizeof(a));yldjd/p> yldjdp>memset(b, 0, sizeof(b));yldjd/p> yldjdp>memset(c, 0, sizeof(c));yldjd/p> yldjdp>strToInt(a, s1);yldjd/p> yldjdp>strToInt(b, s2);yldjd/p> yldjdp>for (int i = 0; i < MAX; i++){ //借鉴手算乘法yldjd/p> yldjdp>for (int j = 0; j < MAX; j++){yldjd/p> yldjdp>c[i + jzjdss= (a[i] * b[j]);yldjd/p> yldjdp>}yldjd/p> yldjdp>}yldjd/p> yldjdp>//处理进位yldjd/p> yldjdp>for (int i = 0; i < MAX - 1; i++){yldjd/p> yldjdp>c[i + 1zjdss= (c[i] / 10);yldjd/p> yldjdp>c[i] = c[i] % 10;yldjd/p> yldjdp>}yldjd/p> yldjdp>return clearZero(intToStr(c, MAX));yldjd/p> yldjdp>}yldjd/p> yldjdp乐观的龙猫 operator/(const BigInteger& other){yldjd/p> yldjdp>string first = clearZero(this->s); //被除数yldjd/p> yldjdp>string second = clearZero(other.s); //除数yldjd/p> yldjdp>if ("0" == second){yldjd/p> yldjdp>return "Error, divisor can no be zero.";yldjd/p> yldjdp>}yldjd/p> yldjdp>if (!Compare(first, second))yldjd/p> yldjdp>return "0";yldjd/p> yldjdp>string result = "", remain = "";yldjd/p> yldjdp>for (int i = 0; i < first.length(); i++){ //借鉴手算除法的步骤yldjd/p> yldjdp>remain += first[i];yldjd/p> yldjdp>result += '0';yldjd/p> yldjdp>while (Compare(remain, second)){yldjd/p> yldjdp>result[result.length() - 1zjdss= 1;yldjd/p> yldjdp>remain = subtraction(remain, second);yldjd/p> yldjdp>}yldjd/p> yldjdp>}yldjd/p> yldjdp>return clearZero(result);yldjd/p> yldjdp>}yldjd/p> yldjdp>friend ostream& operator<yldjd/p> yldjdp>out << b.s;yldjd/p> yldjdp>return out;yldjd/p> yldjdp>}yldjd/p> yldjdp>friend istream& operator>>(istream &in, BigInteger &b){yldjd/p> yldjdp>in >> b.s;yldjd/p> yldjdp>return in;yldjd/p> yldjdp>}yldjd/p> yldjdp>};yldjd/p>

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。