poj grids 2980 大数的乘法

poj grids 2980 大数的乘法
//此题重在理解两个数相乘的算法,

 4 #include  < stdio.h >
 5 #include  < stdlib.h >
 6 #include  < string .h >
 7 #define  MAXSIZE 201
 8 int  main()
 9 {
10    char line1[MAXSIZE];
11    char line2[MAXSIZE];
12    int a1[MAXSIZE];
13    int a2[MAXSIZE];
14    int product[MAXSIZE];
15    
16    while ( scanf ("%s%s", line1, line2) != EOF )
17    {
18          int len1, len2;
19          len1 = strlen (line1);
20          len2 = strlen (line2);
21          
22          memset (a1, 0, sizeof (a1));
23          memset (a2, 0, sizeof (a2));
24          memset (product, 0, sizeof (product));
25          
26          //对负数的处理
27          if ( line1[0] == '-' || line2[0] == '-' )
28                return 0; 
29          //对 0 和 其它数相乘的处理
30          int mark = 0;
31          if ( ( !strcmp (line1,"0") ) || ( !strcmp (line2, "0") ) )
32          {
33               printf ("%d", 0);
34          }
35          
36          //将字符数转化为数字
37          int j = 0;
38          for (int i = len1 - 1; i >= 0; i--)
39          {
40              a1[j++] = line1[i] - '0';
41          } 
42          int k = 0;
43          for (int i = len2 - 1;i >= 0; i--)
44          {
45              a2[k++] = line2[i] - '0';
46          }
47          
48          //乘法算法
49          for (int i = 0; i < len2; i++)
50             for (int j = 0; j < len1; j++)
51             {
52                product[i + j] += a1[j] * a2[i]; 
53             } 
54             
55          //处理进位
56          for (int i = 0; i < MAXSIZE; i++ )
57          {
58              if ( product[i] >= 10 )
59              {
60                   product [i + 1] += product [i] / 10;
61                   product [i] = product[i] % 10;
62              }
63          }
64          
65          //输出处理
66          bool target = false;
67          for (int i = MAXSIZE - 1; i >= 0; i--)
68          {
69             if (target)
70                printf ("%d", product[i]);
71                else if (product[i]) 
72                {
73                     printf ("%d", product[i]);
74                     target = true;
75                }
76          } 
77          printf ("\n");
78    }
79    //system ("pause");
80    return 0;
81}

82
以及特殊数据的考虑 :如 含有 0 和 负数时

你可能感兴趣的:(poj grids 2980 大数的乘法)