POJ 2980 大整数乘法 解题报告

POJ 2980 大整数乘法 解题报告

编号:2980

 

考查点:高精度计算,大数运算

 

思路:但凡大数运算思路一致,都是用数组存,然后处理进位题,乘法比加法稍微复杂一些,进位多,先计算后统一处理进位的方法比较好.

 

提交情况: 继续犯字符到数字忘减‘0’的错误,乘法处理是二重循环..不过仍然是一次提交就ACoh yeah..

 

Source Code

 


//POJ Grids 2980
#include <string>
#include 
<iostream>
using namespace std;

unsigned 
int total[400];
unsigned 
int num1[200];
unsigned 
int num2[200];


int main()
{
    memset(total,
0,sizeof(total));
    
string str1,str2;
    cin
>>str1>>str2;
    
int len,index;
    len 
= str1.length();
    index 
= 0;
    
for (int i=len-1;i>=0;i--)
    {
        num1[index
++= str1[i]-'0';
    }
    len 
= str2.length();
    index 
= 0;
    
for (int i=len-1;i>=0;i--)
    {
        num2[index
++= str2[i]-'0';
    }

    
for (unsigned int i=0;i<str1.length();i++)
    {
        
for (unsigned int j=0;j<str2.length();j++)
        {
            total[i
+j] += num1[i]*num2[j];
        }
    }
    
for (int i=0;i<400;i++)
    {
        
if (total[i]>=10)
        {
            total[i
+1+= total[i]/10;
            total[i] 
%= 10;
        }
    }
    
bool flag = false;
    
for (int i=399;i>=0;i--)
    {
        
if (flag||total[i])
        {
            flag 
= true;
            cout
<<total[i];
        }
    }

    
if (!flag)
    {
        cout
<<"0";
    }

    
return 0;
}

总结:大数乘法是二重循环,先乘,后统一进位.

 

 

 

                                                       By   Ns517

                                                      Time 09.01.27

posted @ 2009-01-27 18:42  端木  阅读(1321)  评论(0编辑  收藏  举报