基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题
Problem Description
给出2个大整数A,B,计算A+B的结果。
Input
第1行:大数A
第2行:大数B
(A,B的长度 <= 10000 需注意:A B有可能为负数)
Output
输出A + B
Input示例
68932147586
468711654886
Output示例
537643802472
用C写的代码, 有一组数据一直过不了,,,,,改了好久一直不过,,,,最后没办法翻了之前学的Python书,用python写的
如果有谁看出我的C哪里错了,还麻烦在评论区给我留言 ,,,,,在这里先谢谢了
C---WA的代码:
#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <string.h>
#include <string>
#include <vector>
#include <queue>
#include <stack>
#include <set>
#include <map>
using namespace std;
typedef long long ll;
const int MAXN = (int) 100000 + 10;
char s1[MAXN], s2[MAXN], s3[MAXN];
int ans[MAXN], sum[MAXN];
int main()
{
int maxlen, flag = 0, num;
gets(s1); gets(s2);
//scanf("%s%s", s1, s2);
int len1, len2;
if(s1[0] == '-')
{
len1 = strlen(s1) - 1;
if(s2[0] == '-')//同为负数
{
len2 = strlen(s2) - 1;
maxlen = max(len1, len2);
for(int i = len1, j = 0; i > 0; i--, j++)
{
sum[j] = s1[i] - '0';
}
for(int i = len2, j = 0; i > 0; i--, j++)
{
ans[j] = s2[i] - '0';
}
for(int i = 0; i < maxlen; i++)
{
ans[i] += sum[i];
if(ans[i] > 9)
{
ans[i+1]++;
ans[i] -= 10;
}
}
if(ans[maxlen - 1] == 0) maxlen++;
printf("-");
}
else//s1为负数,s2为正数
{
len2 = strlen(s2);
maxlen = max(len1, len2);
for(int i = len1, j = 0; i > 0; i--, j++)
{
sum[j] = -(s1[i] - '0');
}
for(int i = len2 - 1, j = 0; i >= 0; i--, j++)
{
ans[j] = s2[i] - '0';
}
for(int i = 0; i < maxlen; i++)
{
ans[i] += sum[i];
if(ans[i] < 0)
{
ans[i+1]--;
ans[i] += 10;
}
}
if(ans[maxlen - 1] == 0) maxlen--;
for(int i = 1, j = 0; i < len1; i++, j++)
{
s3[j] = s1[i];
}
if(len1 > len2) printf("-");
else if(len1 < len2) ;
else if(len1 == len2)
{
if(strcmp(s3, s2) == 1) printf("-");
}
}
}
else
{
len1 = strlen(s1);
if(s2[0] == '-')//s1为正数,s2为负数
{
len2 = strlen(s2) - 1;
maxlen = max(len1, len2);
for(int i = len1 - 1, j = 0; i >= 0; i--, j++)
{
sum[j] = s1[i] - '0';
}
for(int i = len2, j = 0; i > 0; i--, j++)
{
ans[j] = -(s2[i] - '0');
}
for(int i = 0; i < maxlen; i++)
{
ans[i] += sum[i];
if(ans[i] < 0)
{
ans[i+1]--;
ans[i] += 10;
}
}
if(ans[maxlen - 1] == 0) maxlen--;
for(int i = 1, j = 0; i < len2; i++, j++)
{
s3[j] = s2[i];
}
if(len1 < len2) printf("-");
else if(len1 > len2) ;
else if(len1 == len2)
{
if(strcmp(s1, s3) == -1) printf("-");
}
}
else//同为正数
{
len2 = strlen(s2);
maxlen = max(len1, len2);
for(int i = len1 - 1, j = 0; i >= 0; i--, j++)
{
sum[j] = s1[i] - '0';
}
for(int i = len2 - 1, j = 0; i >= 0; i--, j++)
{
ans[j] = s2[i] - '0';
}
for(int i = 0; i < maxlen; i++)
{
ans[i] += sum[i];
if(ans[i] > 9)
{
ans[i+1]++;
ans[i] -= 10;
}
}
if(ans[maxlen - 1] == 0) maxlen++;
}
}
for(int i = maxlen - 1; i >= 0; i--)
{
if(ans[i] != 0) flag = 1;
}
if(flag)
{
for(int i = maxlen; i >= 0; i--)
{
if(ans[i] == 0) continue;
else {
num = i;
break;
}
}
for(int i = num; i >= 0; i--)
printf("%d", ans[i]);
}
else
{
printf("0");
}
printf("\n");
return 0;
}
Python AC代码:
#python
a = int(input())
b = int(input())
print(a + b)
是不是突然感觉python好厉害啊,C写了一百多行,它三句话就搞定了。。。。