首先吧,两个整数123 456,相加得到579,我们就得输出579,这个很容易操作,但是如果是:
1212161596156198115645646886148461554
+
2671232162176217624372497590415915915029125 呢?long ? long long ? long long long?...没这个类型。这数据大小没办法以单个变量储存。当出现这种情况时我们就要考虑数组模拟运算了。
什么是数组模拟运算?可能是把一串长长的数组每一个位置都当做一个位了,长度高达500位的正整数就可以轻而易举地储存进超过500位的数组当中。
比如sum[505]
如何实现呢?如何参与运算呢?耐心看:
————————
我这弄了个代码,可能处理方式不算好,但是能用。:
————
#include
int main(void){
//数组模拟两长正整数加法 之和不超过500位
int sum[500] = {0};
char alp[500]={0};
scanf("%s", alp);
int k = 0;
while(alp[k]!='\0')
k++;
//得到数据长度为k位,最高位在低下标(0),低位在高下标(k-1)
int i = 0;
for (; i < k;i++){
sum[k-i-1] += alp[i] - '0';
}
getchar(); //两串数中间有个空格,该操作可以把空格移出输入缓冲区,不过没有必要
scanf("%s", alp);
k = 0;
while(alp[k]!='\0')
k++;
//得到数据长度为k位,最高位在低下标(0),低位在高下标(k-1)
i = 0;
for (; i < k;i++){
sum[k-i-1] += alp[i] - '0';
}
//进行进位操作
for (i = 0; i < k+1;i++){ //因为是加法,长不了多少位,所以随便取个范围上限(k+1)就行了,太大白白浪费时间
if(sum[i]>=10){
sum[i + 1] += sum[i] / 10;
sum[i] = sum[i] % 10;
}
}
k = 499;
while(sum[k]==0){
k--;
}
//得到计算后的值的最高位的下标,然后开始输出,输出到下标0
while(k>=0){
printf("%d", sum[k]);
k--;
}
}
————
就到这吧。