[关闭]
@DingCao-HJJ 2015-10-20T17:55:19.000000Z 字数 803 阅读 1094

sicily_1381 a*b

sicily 高精度计算


题目链接:http://soj.sysu.edu.cn/1381

代码

  1. #include<stdio.h>
  2. #include<string.h>
  3. void HIGH_PERCISION_MULTIPLICATION(char *stra, char*strb);
  4. int main() {
  5. int T;
  6. char stra[400 + 4], strb[400 + 4];
  7. scanf("%d", &T);
  8. while (T--) {
  9. scanf("%s", stra);
  10. scanf("%s", strb);
  11. HIGH_PERCISION_MULTIPLICATION(stra, strb);
  12. }
  13. return 0;
  14. }
  15. void HIGH_PERCISION_MULTIPLICATION(char *stra, char*strb) {
  16. int a[400 + 4] = { 0 }, b[400 + 4] = { 0 }, pdt[400 + 4] = { 0 };
  17. int i, j, v;
  18. if (!strcmp(stra, "0") || !strcmp(strb, "0")) {
  19. printf("0\n");
  20. return;
  21. }
  22. for (i = strlen(stra), j = 0; i >= 0; i--, j++) a[j] = stra[i] - '0';
  23. for (i = strlen(strb), j = 0; i >= 0; i--, j++) b[j] = strb[i] - '0';
  24. for (i = 1; i <= strlen(stra); i++) {
  25. v = 0;
  26. for (j = 1; j <= strlen(strb); j++) {
  27. pdt[i + j - 1] += a[i] * b[j];
  28. v = pdt[i + j - 1] / 10;
  29. pdt[i + j] += v;
  30. pdt[i + j - 1] %= 10;
  31. }
  32. }
  33. for (i = 400; i >= 1; i--) {
  34. if (pdt[i] != 0) {
  35. for (j = i; j >= 1; j--) printf("%d", pdt[j]);
  36. printf("\n");
  37. return;
  38. }
  39. }
  40. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注