SOJ2509 高精度

Problem Address:http://soj.me/2509

 

真的是大水题。

 

没什么话好说的,高精度。

 

代码也许不够精简。

 

#include <iostream> #include <stdio.h> #include <cstring> using namespace std; char a[10001], b[10001], sum[10001]; bool pa, pb; void add(char *x, char *y, char *result) { int lx = strlen(x), ly = strlen(y); int i, j, k; int p=0, temp; for (i=lx-1, j=ly-1, k=0; i>=0 && j>=0; i--,j--,k++) { temp = x[i]-'0' + y[j]-'0' + p; result[k] = temp%10+'0'; p = temp/10; } while(i>-1) { temp = x[i]-'0' + p; result[k] = temp%10+'0'; p = temp/10; i--; k++; } while(j>-1) { temp = y[j]-'0' + p; result[k] = temp%10+'0'; p = temp/10; j--; k++; } if (p>0) { result[k] = p+'0'; k++; } for (k=k-1; k>=0; k--) if (result[k]!='0') break; k++; if (k==0) { result[k] = '0'; k++; } result[k]='/0'; for (i=0,j=k-1; i<j; i++,j--) { temp=result[i]; result[i] = result[j]; result[j] = temp; } } void x_minus_y(char *x, char *y, char *result) { int lx = strlen(x), ly = strlen(y); int i, j, k; int p=0, temp; for (i=lx-1, j=ly-1, k=0; i>=0 && j>=0; i--,j--,k++) { temp = x[i]-'0' - (y[j]-'0') + p; if (temp<0) { temp += 10; p = -1; } else p = 0; result[k] = temp+'0'; } while(i>-1) { temp = x[i]-'0' + p; if (temp<0) { temp += 10; p = -1; } else p = 0; result[k] = temp+'0'; i--; k++; } for (k=k-1; k>=0; k--) if (result[k]!='0') break; k++; if (k==0) { result[k] = '0'; k++; } result[k]='/0'; for (i=0,j=k-1; i<j; i++,j--) { temp=result[i]; result[i] = result[j]; result[j] = temp; } } int main() { int i; int la, lb; int a_b; while(scanf("%s %s", a, b)!=EOF) { if (a[0]=='-') { pa = false; for (i=0; a[i]!='/0'; i++) a[i]=a[i+1]; } else pa = true; if (b[0]=='-') { pb = false; for (i=0; b[i]!='/0'; i++) b[i]=b[i+1]; } else pb = true; la = strlen(a); lb = strlen(b); if (pa^pb) { if (la>lb) a_b = 1; else if (la<lb) a_b = -1; else { for (i=0; i<la; i++) if (a[i]!=b[i]) break; if (i<la) { if (a[i]>b[i]) a_b = 1; else a_b = -1; } else a_b = 0; } if (a_b==0) printf("0/n"); else if (a_b==1) { x_minus_y(a, b, sum); if (pa) printf("%s/n", sum); else printf("-%s/n", sum); } else { x_minus_y(b, a, sum); if (pb) printf("%s/n", sum); else printf("-%s/n",sum); } } else { add(a, b, sum); if (!pa) printf("-"); printf("%s/n", sum); } } return 0; }

 

你可能感兴趣的:(SOJ2509 高精度)