完整代码及解析如下:
[code]string x, y;//两个string类用来接收大数//a接收x中的每一位数字,b用来接收y中的每一位数组,计算之后,储存到c数组中int a[999], b[999], c[999];int main(){ cin >> x >> y;//读入 //将大数的每一位数转换为(int)类型,然后倒序储存 for (int i = 0; i < x.length(); i++) { a = x[x.length() - 1 - i]-'0'; } for (int i = 0; i < y.length(); i++) { b = y[y.length() - 1 - i]-'0'; } //核心:开始计算 //位数问题:两个数相加,和的位数等于max(x.length(), y.length(),或者是其+1; for (int i = 0; i < max(x.length(), y.length()); i++) { c += a + b;//对应位数求和 c[i + 1] += c / 10;//进位 c = c % 10;//保留 } //下面开始消除前导0 int k = 0;//利用k来修正位数 if (c[max(x.length(), y.length())] == 0)//如果最高位==0 { k = 1;//k++输出位数-1 } //注意看k是如何控制位数的 for (int i = max(x.length(), y.length())-k; i >=0 ; i--) { cout x >> y; //因为x-y有负数存在,所以我们只用大数减小数,最后补全-号就行 //下面进行比较:如果y比x大,就交换位置,并输出-号 if (cmp(x, y) == false)//详见上方的cmp函数 { swap(x, y); cout 0; i--) { if (c == 0) { k++; } else { break; } } for (int i = max(x.length(), y.length())-k; i >= 0; i--) { cout y; for (int i = 0; i < x.length(); i++) { a[i+1] = x[x.length() - 1 - i]-'0'; } for (int i = 0; i < y.length(); i++) { b[i+1] = y[y.length() - 1 - i]-'0'; } //核心代码 for (int i = 1; i =1 ; i--) { cout s >> b; //注意除法时是正序输入 for (int i = 0;i