对于大整型数据的四则计算,一种办法是运用数组将该大整数的各个位数上的数字保存起来,然后再根据四则运算的诸位运算规则将各位数上的数字逐一计算,注意进位时的操作技巧!
一道Uva online的题目, 还算顺利,第一次提交就AC了,现将代码copy如下,还望各位高手指点一二。。。。。。
题目出处:uva.onlinejudge.org/index.php
#
include < iostream >
#include < cstring >
#include < cmath >
using namespace std;
const int MAX = 210;
int LongIntNum[MAX][MAX];
int Result[MAX];
//保存计算结果
char LongIntStr[MAX][MAX];
void Add(int LongIntNum[MAX][MAX], int n, int Result[])
//计算两个大整型数据的和
{
int i;
int carry = 0;
for
(i = 0; i < MAX; i++) {
int add = LongIntNum[n][i] + Result[i] + carry;
Result[i] = add % 10;
carry = add / 10;
}
}
int main() {
int m = 0, n = 0, i, j, len;
memset(Result, 0, MAX);
//将记录结果的数组清零
for
(i = 0; i < MAX; i++)
//将数组清零
memset(LongIntNum[i], 0, sizeof(LongIntNum[i]));
while
(cin.getline(LongIntStr[n], MAX)) {
len = strlen(LongIntStr[n]);
if
(len == 1 && LongIntStr[n][0] ==
'0'
)
//输入为0时退出
break
;
for
(i = 0; i < len; i++)
LongIntNum[n][i] = LongIntStr[n][len - i - 1] -
'0'
;
//将该大整型数据逆序存储以便进位时的计算
n++;
}
for
(i = 0; i < n; i++)
Add(LongIntNum, i, Result);
//计算所有大整型数据的和
for
(i = MAX - 1; i >= 0; i--)
//忽略前导0
if
(Result[i])
break
;
for
(j = i; j >= 0; j--)
cout << Result[j];
cout << endl;
return
0;
}
|