51nod——1005 大数加法

来源:互联网 发布:淘宝联盟支持购物车吗 编辑:程序博客网 时间:2024/06/10 02:21

题目链接:点击打开链接

题目:

给出2个大整数A,B,计算A+B的结果。

Input
第1行:大数A第2行:大数B(A,B的长度 <= 10000 需注意:A B有可能为负数)
Output
输出A + B
Input示例
68932147586468711654886
Output示例
537643802472

题目描述:

简单的大数加法,带有负数,实际上就是大数加法和大数减法的结合,注意考虑0,0、-0,-0的情况。仔细一点,问题不大。

解题代码:

#include<stdio.h>#include<string.h>int main(){int a[10010],b[10010];int i,f,g;char aa[10010],bb[10010];scanf("%s%s",aa,bb);memset(a,0,sizeof(a));memset(b,0,sizeof(b));f = g = 0;if(aa[0] == '-')f = 1;if(bb[0] == '-')g = 1;if(!f)for(i = strlen(aa) - 1;i >= 0;i --)a[strlen(aa) - 1 - i] = aa[i] - '0';elsefor(i = strlen(aa) - 1;i > 0;i --)a[strlen(aa) - 1 - i] = aa[i] - '0';if(!g)for(i = strlen(bb) - 1;i >= 0;i --)b[strlen(bb) - 1 - i] = bb[i] - '0';elsefor(i = strlen(bb) - 1;i > 0;i --)b[strlen(bb) - 1 - i] = bb[i] - '0'; if(f && g){for(i = 0;i < (strlen(aa) > strlen(bb) ? strlen(aa) : strlen(bb));i ++){a[i] += b[i];if(a[i] >= 10){a[i] -= 10;a[i + 1] ++;}}if(strlen(aa) == strlen(bb) && strlen(aa) == 2 && a[0] == b[0] && a[0] == 0){printf("0\n");return 0;}putchar('-');int j = 0;for(i = 10010 - 1;i >= 0;i --){if(j)printf("%d",a[i]);else if(a[i] ){printf("%d",a[i]);j = 1;}}if(!j)printf("0");putchar('\n');}else if(!f && !g){for(i = 0;i < (strlen(aa) > strlen(bb) ? strlen(aa) : strlen(bb));i ++){a[i] += b[i];if(a[i] >= 10){a[i] -= 10;a[i + 1] ++;}}int j = 0;for(i = 10010 - 1;i >= 0;i --){if(j)printf("%d",a[i]);else if(a[i] ){printf("%d",a[i]);j = 1;}}if(!j)printf("0");putchar('\n');}else if(!f && g){int x = 1;if(strlen(aa) > strlen(bb) - 1)x = 1;else if(strlen(aa) < strlen(bb) - 1)x = 0;else{for(i = strlen(aa) - 1; i >= 0;i --) {if(a[i] > b[i]){x = 1;break;}else if(a[i] < b[i]){x = 0;break;}}}//printf("%d\n",x);for(i = 0;i < (x ? strlen(aa) : strlen(bb) - 1);i ++){if(x){a[i] -= b[i];if(a[i] < 0){a[i] += 10;a[i + 1] --;}}else{b[i] -= a[i];if(b[i] < 0){b[i] += 10;b[i + 1] --;}}}if(!x)putchar('-');if(x){int j = 0;for(i = 10010 - 1;i >= 0;i --){if(j)printf("%d",a[i]);else if(a[i] ){printf("%d",a[i]);j = 1;}}if(!j)printf("0");}else{int j = 0;for(i = 10010 - 1;i >= 0;i --){if(j)printf("%d",b[i]);else if(b[i] ){printf("%d",b[i]);j = 1;}}if(!j)printf("0");}putchar('\n');}else{int x = 0;if(strlen(aa) - 1 > strlen(bb))x = 1;else if(strlen(aa) - 1 < strlen(bb))x = 0;else{for(i = strlen(bb) - 1; i >= 0;i --) {if(a[i] > b[i]){x = 1;break;}else if(a[i] < b[i]){x = 0;break;}}}//printf("%d\n",x);for(i = 0;i < (x ? strlen(aa) - 1 : strlen(bb));i ++){if(x){a[i] -= b[i];if(a[i] < 0){a[i] += 10;a[i + 1] --;}}else{b[i] -= a[i];if(b[i] < 0){b[i] += 10;b[i + 1] --;}}}if(x)putchar('-');if(x){int j = 0;for(i = 10010 - 1;i >= 0;i --){if(j)printf("%d",a[i]);else if(a[i] ){printf("%d",a[i]);j = 1;}}if(!j)printf("0");}else{int j = 0;for(i = 10010 - 1;i >= 0;i --){if(j)printf("%d",b[i]);else if(b[i] ){printf("%d",b[i]);j = 1;}}if(!j)printf("0");}putchar('\n');} return 0;} 



原创粉丝点击