本帖最后由 砚堂_ 于 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;
}
|