大整数相乘算法

来源:互联网 发布:简述osi七层网络模型 编辑:程序博客网 时间:2024/05/16 14:53
Java代码 复制代码 收藏代码
  1. package cn.bigint;
  2. import java.io.IOException;
  3. public class BigInts {
  4. public String BigIntAdd(String s1, String s2) throws IOException {
  5. IntString intt1 = new IntString();
  6. String str = "";
  7. IntString intt2 = new IntString();
  8. intt1.digits = convert(s1);
  9. intt1.len = s1.length();
  10. intt2.digits = convert(s2);
  11. intt2.len = s2.length();
  12. int[] a = intt1.digits;
  13. int[] b = intt2.digits;
  14. int alength = intt1.len;
  15. int blength = intt2.len;
  16. IntString intt3 = new IntString();
  17. intt3.len = (alength + blength);
  18. int clength = intt3.len;
  19. int[] c = new int[clength];
  20. for (int i = 0; i < alength; ++i) {
  21. for (int j = 0; j < blength; ++j) {
  22. c[(i + j)] += a[i] * b[j];
  23. }
  24. }
  25. for (int i = 0; i < c.length; ++i) {
  26. if (c[i] > 9) {
  27. c[(i + 1)] += c[i] / 10;
  28. c[i] %= 10;
  29. }
  30. }
  31. intt3.digits = c;
  32. clength = intt3.len;
  33. if (c[(clength - 1)] ==0)
  34. --clength;
  35. for (int i = clength -1; i >= 0; --i) {
  36. str = str + String.valueOf(c[i]);
  37. }
  38. return str;
  39. }
  40. public static int[] convert(String str) {
  41. int length = str.length();
  42. int[] t = new int[length];
  43. for (int i = 0; i < str.length(); ++i) {
  44. t[i] = (str.charAt(length - i - 1) - '0');
  45. }
  46. return t;
  47. }
  48. class IntString {
  49. public int len;
  50. public int[] digits;
  51. public IntString() {
  52. this.len = 0;
  53. this.digits = null;
  54. }
  55. }   
原创粉丝点击