您的位置:首页 > 其它

51nod 1005 大数加法

2017-08-10 17:27 288 查看
点这里

注意细节!

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <algorithm>
#include <string>
using namespace std;
string tt1;
string tt2;
char tt3[10010];
char tt4[10010];
int ff1[10010];
int ff2[10010];
int ans[10010];
int max(int a, int b)
{
if (a >= b)
return a;
else
return b;
}
int main()
{

while (cin >> tt1 >> tt2)
{
int f1 = 0, f2 = 0, t = 0;
if (tt1[0] == '-')
f1 = 1;
if (tt2[0] == '-')
f2 = 1;
memset(ans, 0, sizeof(ans));
int len1 = tt1.length(), len2 = tt2.length();
if (f1 == 0)
{
for (int i = 0; i < len1; i++)
{
ff1[i] = tt1[len1 - 1 - i] - '0';
tt3[i] = tt1[i];
}
}
else
{
for (int i = 1; i < len1; i++)
{
ff1[i - 1] = tt1[len1 - i] - '0';
tt3[i - 1] = tt1[i];
}

len1--;
}
if (f2 == 0)
{
for (int i = 0; i < len2; i++)
{
ff2[i] = tt2[len2 - 1 - i] - '0';
tt4[i] = tt2[i];
}

}
else
{
for (int i = 1; i < len2; i++)
{
ff2[i - 1] = tt2[len2 - i] - '0';
tt4[i - 1] = tt2[i];
}

len2--;
}

int sum, carry = 0, dight;
int maxlen = max(len1, len2);
for (int i = 0; i < maxlen + 1; i++)
{

sum = carry;
if ((f1 == 0 && f2 == 0) || (f1 == 1 && f2 == 1))
{
sum += ff1[i];
sum += ff2[i];
}
else if (len2>len1)
{
sum += ff2[i];
sum -= ff1[i];
}
else if(len2<len1)
{
sum += ff1[i];
sum -= ff2[i];
}
else
{
if (strcmp(tt3,tt4)>0)
{
sum += ff1[i];
sum -= ff2[i];
}
else
{
sum += ff2[i];
sum -= ff1[i];
}
}
dight = sum % 10;
carry = sum / 10;
if (dight < 0)
{
dight += 10;
carry = -1;
}
ans[i] = dight;
}
int k;
for (k = maxlen + 1; k >= 0; k--)
{
if (ans[k] != 0)
break;
}
if ((f1 == 1 && f2 == 1) || (len1>len2&&f1 == 1) || (len2>len1&&f2 == 1) || ((len1 == len2) && strcmp(tt3, tt4)>0 && f1 == 1) || ((len1 == len2) && strcmp(tt3, tt4)<0 && f2 == 1))
printf("-");
while (k >= 0) { printf("%d", ans[k--]); t = 1; }
if (t == 0)
printf("0");
printf("\n");
}return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: