大数加法----
/*pre: 任意一个(或存在一个)加数不能用__64lld来存储,否则数据会溢出;*/
The Code Follows:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXN 1005
int ans1[MAXN],ans2[MAXN],ans3[MAXN]; ?
char a[MAXN],b[MAXN],c[MAXN];
int main() {
? ? int t;
? ? scanf("%d",&t);
? ? getchar(); ? //吸收一个回车符;
? ? while(t--) {
? ? ? ? memset(ans1,sizeof(ans1));
? ? ? ? memset(ans2,sizeof(ans2));
? ? ? ? memset(ans3,sizeof(ans3)); ? //初始化为0;
? ? ? ? scanf("%s %s %s",a,b,c);
? ? ? ??
? ? ? ? int len1 = strlen(a);
? ? ? ? int k = 0;
? ? ? ? for(int i=len1-1; i>=0; i--) {
? ? ? ? ? ? ans1[k++] = a[i]-48;? //将数字字符转换为数字;
? ? ? ? }
? ? ? ? int len2 = strlen(b);
? ? ? ? k = 0;
? ? ? ? for(int i=len2-1; i>=0; i--) {
? ? ? ? ? ? ans2[k++] = b[i]-48; //将数字字符转换为数字;
? ? ? ? }
? ? ? ? int len3 = strlen(c);
? ? ? ? k = 0;
? ? ? ? for(int i=len3-1; i>=0; i--) {
? ? ? ? ? ? ans3[k++] = c[i]-48; //将数字字符转换为数字;
? ? ? ? }
? ? ? ? for(int i=0; i<MAXN; i++) {
? ? ? ? ? ? ans1[i] = ans1[i] + ans2[i] + ans3[i];
? ? ? ? ? ? if(ans1[i] >= 10 && ans1[i] < 20) {
? ? ? ? ? ? ? ? ans1[i] = ans1[i]%10;
? ? ? ? ? ? ? ? ans1[i+1] = ans1[i+1] + 1; // 进位1;
? ? ? ? ? ? }else if(ans1[i] >= 20){
? ? ? ? ? ? ? ? ans1[i] = ans1[i]%20;
? ? ? ? ? ? ? ? ans1[i+1] = ans1[i+1] + 2; //进位2;
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? int flag = 0; //标记是否输出0;
? ? ? ? for(int i=MAXN; i>=0; i--) {
? ? ? ? ? ? if(flag) {
? ? ? ? ? ? ? ? printf("%d",ans1[i]);
? ? ? ? ? ? ? ? continue;
? ? ? ? ? ? }
? ? ? ? ? ? if(ans1[i]) {
? ? ? ? ? ? ? ? printf("%d",ans1[i]);
? ? ? ? ? ? ? ? flag = 1;
? ? ? ? ? ? }
? ? ? ? }
puts(""); ? ? } }