|
发表于 2018-11-12 20:29:09
|
显示全部楼层
本楼为最佳答案
本帖最后由 砚堂_ 于 2018-11-12 20:37 编辑
可以做到,就是有点繁琐。贴上C++的代码(只是用C++做了输入输出,别的部分和C语言是相通的)
这段代码只能进行正整数的相加,没有考虑小数,也没有考虑负数的情况。
- #include "pch.h"
- #include <iostream>
- using namespace std;
- const int MAX = 100;
- int main()
- {
- cout << "大整数相加" << endl;
- cout << "请输入第一个整数:" << endl;
- char* a = new char[MAX] {0};
- cin >> a;
- cout << "请输入第二个整数:" << endl;
- char* b = new char[MAX] {0};
- cin >> b;
- char* c = new char[MAX] {0};
- //核心代码
- int m = 0, n = 0; //位数
- while (a[m]) m++;
- while (b[n]) n++;
- int r = m > n ? m + 1 : n + 1; //结果最多比原数据多1位
- int carry = 0; //加法进位
- m--, n--, r--; //数组下标从0开始
- while (m >= 0 && n >= 0)
- {
- c[r] = a[m--] + b[n--] - '0'*2 + carry;
- carry = c[r] / 10; //进位
- c[r] = c[r]%10+'0'; //本位
- r--;
- }
- while (m >= 0)
- {
- c[r] = a[m--] -'0' + carry;
- carry = c[r] / 10;
- c[r] = c[r] % 10 + '0';
- r--;
- }
- while (n >= 0)
- {
- c[r] = a[n--] -'0' + carry;
- carry = c[r] / 10;
- c[r] = c[r] % 10 + '0';
- r--;
- }
- char* result;
- if (carry == 1)
- {
- c[0] = 1+'0';
- result = c;
- }
- else
- {
- result = &c[1];
- }
- cout << r;
- cout << "结果是:" << endl;
- cout << result << endl;
- getchar();
- delete a;
- delete b;
- delete c;
- return 0;
- }
复制代码 |
|