SZU:B47 Big Integer I
2013-07-26 13:22
274 查看
Judge Info
Memory Limit: 32768KBCase Time Limit: 10000MS
Time Limit: 10000MS
Judger: Normal
Description
Please calculate the answer of A+B and the answer of A-B, both A and B are integer.Input
The first line of input contains, the number of test cases. There is only line for each test case. It contains two integers
.
Output
For each test case, output two lines A+B and A-B.Sample Input
3 1 2 1 1 -1 -1
Sample Output
3 -1 2 0 -2 0
题解:
1. 调试了很多遍,WA,之后朋友用python 测试很多大数据,我都测试了,数据正常,但还是WA,问了cxc,才发现,擦擦,尼玛,爆粗有木有? 调代码调了四个多小时只是没考虑前导0 ?带前导0也算神马整数 , -000001 是 -1 0000002 是 2 , 哪有这么无语的数据,擦擦!!
2. 第二次调试发现前导0去掉了。但是忽略了一个重要的数据,妹的 -00000 减去 +0000000 等于 -0 的有木有? 又单独考虑0的符号问题,最终AC。
虽然我代码写的很啰嗦,也很难懂,给自己做个留念吧。
#include <stdio.h> #include <string.h> #define max(a, b) ((a) >= (b) ? (a) : (b)) char A[1012]; char B[1012]; int C[1012]; int mark; char *revstr(char *str, size_t len) { char *start = str; char *end = str + len - 1; char ch; if (str != NULL) { while (start < end) { ch = *start; *start++ = *end; *end-- = ch; } } return str; } void add(char A[], char B[]){ int i, lenA, lenB, len; memset(C,0,sizeof(C)); lenA = strlen(A); lenB = strlen(B); len = max(lenA, lenB); revstr(A,lenA); revstr(B,lenB); A[lenA] = '0'; B[lenB] = '0'; for(i=0;i<len+1;i++){ C[i] = (A[i] - '0') + (B[i] - '0') ; } for(i=0;i<len+1;i++){ if(C[i] > 9 ){ C[i]%=10; C[i+1]++; } } if(mark == 1) putchar('-'); if(C[len]==0){ for(i=len-1;i>=0;--i) printf("%d", C[i]); printf("\n"); } else { for(i=len;i>=0;--i) printf("%d", C[i]); printf("\n"); } A[lenA] = '\0'; B[lenB] = '\0'; revstr(A,lenA); revstr(B,lenB); } void minus(char A[], char B[]){ int i, lenA, lenB, len; memset(C,0,sizeof(C)); lenA = strlen(A); lenB = strlen(B); len = max(lenA, lenB); revstr(A,lenA); revstr(B,lenB); A[lenA] = '0'; B[lenB] = '0'; for(i=0;i<len;i++){ C[i] = (A[i] - '0') - (B[i] - '0') ; } for(i=0;i<len;++i){ if(C[i] <0 ){ C[i] += 10; C[i+1]--; } } if(mark == 1) putchar('-'); for(;C[len]==0;--len) if(len==0) break; for(i=len;i>=0;--i) printf("%d", C[i]); printf("\n"); A[lenA] = '\0'; B[lenB] = '\0'; revstr(A,lenA); revstr(B,lenB); } int main(int argc, char const *argv[]) { int t, i, lenA, lenB, len, Amark, Bmark; scanf("%d", &t); while(t--){ mark = 0; Amark = 0; Bmark = 0; memset(A,'0',sizeof(A)); memset(B,'0',sizeof(B)); scanf("%s", A); scanf("%s", B); lenA = strlen(A); lenB = strlen(B); int len; len = max(lenA, lenB); if(A[0] == '-'){ for(i=1;i<lenA;++i) A[i-1]=A[i]; A[i-1]='\0'; A[i] = '0'; Amark = 1; } if(B[0] == '-'){ for(i=1;i<lenB;++i) B[i-1]=B[i]; B[i-1]='\0'; B[i] = '0'; Bmark = 1; } while(A[0]== '0'){ for(i=0;i<lenA;++i) A[i]=A[i+1]; A[lenA]='0'; } if(A[0]=='\0'){ A[0]='0'; A[1]='\0'; } while(B[0]== '0'){ for(i=0;i<lenB;++i) B[i]=B[i+1]; B[lenB]='0'; } if(B[0]=='\0'){ B[0]='0'; B[1]='\0'; } if(A[0] == '0' && B[0] == '0'){ printf("0\n"); printf("0\n"); continue; } lenA = strlen(A); lenB = strlen(B); len = max(lenA, lenB); lenA = strlen(A); lenB = strlen(B); if(Amark == 0 && Bmark == 0 ){ mark = 0; add(A,B); if(lenA>lenB){ mark = 0; minus(A,B); } else if(lenA < lenB){ mark = 1; minus(B,A); } else { if(strcmp(A,B)>0){ mark = 0; minus(A,B); } else if(strcmp(A,B)<0){ mark = 1; minus(B,A); } else {mark =0 ;minus(A,B);} } continue; } if(Amark == 1 && Bmark ==1){ mark = 1; add(A,B); if(lenA>lenB){ mark = 1; minus(A,B); } else if(lenA<lenB){ mark = 0; minus(B,A); } else { if(strcmp(A,B)>0){ mark = 1; minus(A,B); } else if(strcmp(A,B)<0){ mark = 0; minus(B,A); } else{ minus(A,B); } } continue; } if(Amark == 1 && Bmark == 0){ if(lenA>lenB){ mark = 1; minus(A,B); } else if(lenA<lenB){ mark = 0; minus(B,A); } else { if(strcmp(A,B)>0){ mark = 1; minus(A,B); } else if(strcmp(A,B)<0){ mark = 0; minus(B,A); } else{ mark = 0; minus(A,B); } } mark = 1; add(A,B); continue; } if(Amark == 0 && Bmark == 1){ if(lenA>lenB){ mark = 0; minus(A,B); } else if(lenA<lenB){ mark = 1; minus(B,A); } else{ if(strcmp(A,B)>0){ mark = 0; minus(A,B); } else if(strcmp(A,B)<0){ mark = 1; minus(B,A); } else { mark = 0; minus(A,B); } } mark = 0; add(A,B); continue; } } return 0; }
相关文章推荐
- SZU:B47 Big Integer II
- SZU:B47 Big Integer I
- SZU:B47 Big Integer II
- JAVA之BigInteger(转)【转】【很好用啊】
- java使用BigInteger进行进制转换
- 【问题解决:连接异常】 java.lang.ClassCastException: java.math.BigInteger cannot be cast to java.lang.Long
- 剑指offer面试题12 使用BigInteger来实现 打印1到最大的n位数
- Java中的java.math.BigInteger
- java 大数BigInteger总结
- java.math包中的BigInteger和BigDecimal
- BigInteger和BigDecimal--数字运算精度的设置
- 常见对象_BigInteger的概述和构造方法
- 讨论一下js获取响应中后台传回来的BigInteger类型的数字时,后几位会自动变为0的问题
- BigInteger大整数类——实例和源码(相当经典)
- BigInteger大整数类——实例和源码(相当经典)
- 常用类"三"(BigInteger,BigDecimal,Date)
- 简单常用类:Math 、Random、System、Integer、Character、BigInteger、BigDecimal等
- Java笔试题——2的100次方,不用大数据类(Biginteger)来解答
- BigInteger.testBit(int n)与setBit(int n)
- JAVA常用类之——BigInteger和BigDecimal