69,371
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define EXIT_SUCCESS 0
#define EXIT_FAILURE 1
#define MAX_LEN 1000
typedef struct {
char number[MAX_LEN];
int length;
} BigNumber;
void initBigNumber(BigNumber*);
int asc2int(char);
char int2asc(int);
void inputBigBumber(BigNumber*, char[]);
BigNumber addBigBumber(BigNumber, BigNumber);
char* strBigBumber(BigNumber);
int main(void) {
BigNumber a, b, result;
int T, ids = 1;
initBigNumber(&a);
initBigNumber(&b);
initBigNumber(&result);
scanf("%d", &T);
//getchar();
if (T >= 1 && T <= 20) {
while (ids <= T) {
char stra[MAX_LEN], strb[MAX_LEN];
scanf("%s%s", stra, strb);
inputBigBumber(&a, stra);
inputBigBumber(&b, strb);
result = addBigBumber(a, b);
printf("Case %d:\n%s + %s = %s\n", ids, strBigBumber(a),
strBigBumber(b), strBigBumber(result));
if(ids < T)
printf("\n");
ids++;
}
}
return EXIT_SUCCESS;
}
char* strBigBumber(BigNumber result) {
int i = 0;
int ids = 0;
char *s = (char*) malloc((result.length + 1) * sizeof(char));
for (i = result.length - 1; i >= 0; i--) {
s[ids++] = result.number[i];
}
s[result.length] = '\0';
return s;
}
BigNumber addBigBumber(BigNumber a, BigNumber b) {
int slop = 0, i;
int len = (a.length > b.length) ? a.length : b.length;
int zero = 0;
BigNumber result;
initBigNumber(&result);
result.length = len;
for (i = 0; i < len; i++) {
int t = asc2int(a.number[i]) + asc2int(b.number[i]) + slop;
if (t >= 10) {
t = t - 10;
slop = 1;
} else {
slop = 0;
}
result.number[i] = int2asc(t);
}
if (slop == 1) {
result.number[result.length] = int2asc(slop);
result.length = result.length + 1;
}
for(i = result.length - 1; i >= 0 && !zero; i--){
if(result.number[i] == '0'){
result.length = result.length - 1;
}else{
zero = 1;
}
}
return result;
}
void initBigNumber(BigNumber *big) {
int i = 0;
while (i < MAX_LEN) {
big->number[i] = '0';
i++;
}
big->length = 0;
}
int asc2int(char ch) {
return (int) (ch - 48);
}
char int2asc(int a) {
return (char) (a + 48);
}
void inputBigBumber(BigNumber *big, char s[]) {
int len = strlen(s);
int i,ids = 0;
for(i = len - 1; i >= 0; i--){
big->number[ids++] = s[i];
}
big->length = ids;
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define EXIT_SUCCESS 0
#define EXIT_FAILURE 1
#define MAX_LEN 1000
typedef struct
{
char number[MAX_LEN];
int length;
} BigNumber;
void initBigNumber(BigNumber*);
int asc2int(char);
char int2asc(int);
void inputBigBumber(BigNumber*, char[]);
BigNumber addBigBumber(BigNumber, BigNumber);
char* strBigBumber(BigNumber);
int main(void) {
BigNumber a, b, result;
int T, ids = 1;
scanf("%d", &T);
//getchar();
if (T >= 1 && T <= 20) {
while (ids <= T) {
char stra[MAX_LEN], strb[MAX_LEN];
initBigNumber(&a);
initBigNumber(&b);
scanf("%s%s", stra, strb);
inputBigBumber(&a, stra);
inputBigBumber(&b, strb);
initBigNumber(&result);
result = addBigBumber(a, b);
printf("Case %d:\n%s + %s = %s\n", ids, strBigBumber(a),
strBigBumber(b), strBigBumber(result));
if(ids < T)
printf("\n");
ids++;
}
}
return EXIT_SUCCESS;
}
char* strBigBumber(BigNumber result) {
int i = 0;
int ids = 0;
char *s = (char*) malloc((result.length + 1) * sizeof(char));
for (i = result.length - 1; i >= 0; i--) {
s[ids++] = result.number[i];
}
s[result.length] = '\0';
return s;
}
BigNumber addBigBumber(BigNumber a, BigNumber b) {
int slop = 0, i;
int len = (a.length > b.length) ? a.length : b.length;
int zero = 0;
BigNumber result;
initBigNumber(&result);
result.length = len;
for (i = 0; i < len; i++) {
int t = asc2int(a.number[i]) + asc2int(b.number[i]) + slop;
if (t >= 10) {
t = t - 10;
slop = 1;
} else {
slop = 0;
}
result.number[i] = int2asc(t);
}
if (slop == 1) {
result.number[result.length] = int2asc(slop);
result.length = result.length + 1;
}
for(i = result.length - 1; i >= 0 && !zero; i--){
if(result.number[i] == '0'){
result.length = result.length - 1;
}else{
zero = 1;
}
}
return result;
}
void initBigNumber(BigNumber *big) {
int i = 0;
while (i < MAX_LEN) {
big->number[i] = '0';
i++;
}
big->length = 0;
}
int asc2int(char ch) {
return (int) (ch - 48);
}
char int2asc(int a) {
return (char) (a + 48);
}
void inputBigBumber(BigNumber *big, char s[]) {
int len = strlen(s);
int i,ids = 0;
for(i = len - 1; i >= 0; i--){
big->number[ids++] = s[i];
}
big->length = ids;
}