背景
我们知道C语言int所能表示的数字范围是-231 ~ 231-1,所能表示的最大整数为2147483647,那么long long所能表示的数字范围是-263 ~ 263-1,所能表示的最大整数为9223372036854775807,那么如果我们想计算更大的数据呢,那C的基本数据类型就做不到了,所以这里我们需要数组
实现代码
#include<stdio.h>
#define MAXLEN 100
typedef int sqlist[MAXLEN];
int input(sqlist A) {
int i;
for(i = 0; i < MAXLEN; i++) {
A[i] = 0;
}
printf("输入一个正整数的各位(输入-1结束读取)\n");
i = 0;
int x;
while(1) {
scanf("%d", &x);
if(x < 0) {
break;
}
A[i++] = x;
}
return i;
}
void output(sqlist A, int low, int high) {
int i;
for(i = low; i < high; i++) {
printf("%d", A[i]);
}
printf("\n");
}
void move(sqlist A, int na) {
int i;
for(i = 0; i < na; i++) {
A[MAXLEN - i - 1] = A[na - i - 1];
}
}
int add(sqlist A, int na, sqlist B, int nb) {
int nc, i, j, length = 0;
if(na > nb) {
nc = na;
}
else {
nc = nb;
}
move(A,na);
move(B,nb);
for(i=MAXLEN-1;i>=MAXLEN-nc;i--)
{
j=(A)[i]+B[i];
if(j>9)/*和大于9*/
{
(A)[i-1]=(A)[i-1]+1; /*高位加上1*/
(A)[i]=j-10; /*和减去10后存储到当前位*/
}
else
(A)[i]=j;
if(i==MAXLEN-nc)/*处理最高位*/
{
if(j>9)
{
(A)[i-1]=1;
length=nc+1;
}
else
length=nc;
}
}
return length;
}
void main() {
sqlist A, B;
int na, nb, nc;
na = input(A);
nb = input(B);
printf("整数A:");
output(A, 0, na);
printf("整数B:");
output(B, 0, nb);
nc=add(A,na,B,nb);
printf("相加后的结果:");
output(A,MAXLEN-nc,MAXLEN);
}
样例运算结果如下: