POJ 2980 大整数乘法 解题报告
POJ 2980 大整数乘法 解题报告
编号:2980
考查点:高精度计算,大数运算
思路:但凡大数运算思路一致,都是用数组存,然后处理进位题,乘法比加法稍微复杂一些,进位多,先计算后统一处理进位的方法比较好.
提交情况: 继续犯字符到数字忘减‘0’的错误,乘法处理是二重循环..不过仍然是一次提交就AC。oh 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