设计一个程序实现两个任意长的整数的求和运算。

2025-03-24 00:33:55
推荐回答(2个)
回答1:

#include
#include

using namespace std;
int main()
{
string a, b;
int *sum;
int i, ja, jb;

cout << "请输入两个数字,每个数字以空格结尾:" << endl;
cin >> a >> b;

string temp;
if ( a.size() > b.size() ) // 如果a长度大于b,则交换两字符串
{
temp = a;
a = b;
b = temp;
}

// 在这后,就肯定是a的长度比b小,所以和的位数最大就是b的位数+1。
sum = new int[b.size()+1]; // 所以给和申请b的位数+1个位置。
sum[0] = 0;
char achar[1];
char bchar[1];

int carry = 0; // 记录进位
int sizeDif = b.size() - a.size(); // 记录两个数字的位数差
int count; // 记录和的位数
for ( ja = a.size()-1, jb = b.size()-1; ja >= 0; ja--, jb-- )
{
achar[0] = a[ja];
bchar[0] = b[jb];
sum[jb+1] = atoi(achar) + atoi(bchar) + carry;
carry = 0; // 清空进位标志位
if( sum[jb+1] > 9 )
{
carry = 1;
sum[jb+1] -= 10; // 使之成为一位数,方便输出。
}
}
for ( i = sizeDif-1; i >= 0 ; i-- )
{
bchar[0] = b[i];
sum[i+1] = atoi(bchar); // 转换为数字
carry = 0; // 清空进位标志位
if( sum[i+1] > 9 )
{
carry = 1;
sum[i+1] -= 10; // 使之成为一位数,方便输出。
}
}

cout << endl << "The process is:" << endl;
for ( i = 0; i <= sizeDif; i++ )
{
cout << " ";
}
cout << a << endl;
cout << "+" << b << endl;
for ( i = 0; i <= b.size(); i++ )
cout << "-";
cout << endl;

if ( carry == 1 ) // 当和的位数为b的位数+1时
{
cout << '1'; // 先输出最高位,否则就不输出。
}
else
{
cout << " ";
}
for ( i = 1; i <= b.size(); i++ )
cout << sum[i];
cout << endl;

cout << endl << "So the result is: ";

int remainder;
if ( carry == 1 ) // 当和的位数为b的位数+1时
{
count = b.size()+1;
sum[0] = 1;
remainder = count%4;
for ( i = 0; i < remainder; i++ )
cout << sum[i];
if ( remainder == 0 )
{
for ( ; remainder < 4; remainder++ )
cout << sum[remainder];
}
for ( i = remainder; i < count; i++ )
{
if ( (i-remainder) % 4 == 0)
cout << ',';
cout << sum[i];
}
}
else
{
count = b.size();
remainder = count%4;
for ( i = 1; i < remainder+1; i++ )
cout << sum[i];
if ( remainder == 0 )
{
for ( remainder++; remainder < 4; remainder++ )
cout << sum[remainder];
}
for ( i = remainder; i < count; i++ )
{
if ( (i-remainder) % 4 == 0)
cout << ',';
cout << sum[i];
}
}
cout << endl;

return 0;

}
// 花了N个小时写出来的啊!!!

回答2:

用字符串表示长整数,然后取出每一位来转换为整数,按照列竖式手算加减法的方法从后到前计算