书山有径勤为路>>>>>>>>

<<<<<<<<学海无涯苦作舟!

大整数乘法——简单

写这个程序的时候有三个关键点,

知道了这个,你Win, Or, 你Lose!

我将它们一一注释在了代码中。

 

View Code
#include "iostream"
#include "cstring"
#include "string"
using namespace std;
#define maxlen 200
int a[maxlen];
int b[maxlen];
int c[2*maxlen+1]; //这个地方也是个关键,一定要多加一个正数,不然错
string s1;
string s2;
int main()
{
while(cin>>s1>>s2)
{
memset(a, 0, sizeof(a));
memset(b, 0, sizeof(b));
memset(c, 0, sizeof(c));
int lena, lenb;
lena = s1.length();
lenb = s2.length();
for(int i=lena-1, j=0; i>=0; i--) a[j++] = s1[i]-'0';
for(int i=lenb-1, j=0; i>=0; i--) b[j++] = s2[i]-'0';
for(int i=0; i<lena; i++)
for(int j=0; j<lenb; j++)
c[i+j] += a[i]*b[j]; //这里是+=,这个是相当关键的,因为要多次相乘嘛
for(int i=0; i<maxlen*2; i++) //上限就是lena+lenb了,而不是lena*lenb
{
if(c[i]>=10)
{
c[i+1] += c[i]/10;
c[i] %= 10;
}
}
bool flag = false;
for(int i=maxlen*2; i>=0; i--) //上限就是lena+lenb了,而不是lena*lenb
{

if(flag) cout<<c[i];
else if(c[i])
{
cout<<c[i];
flag = true;
}
}
if(!flag) cout<<"0"<<endl;
cout<<endl;
}
return 0;
}

posted on 2011-10-12 11:24  More study needed.  阅读(311)  评论(0编辑  收藏  举报

导航

书山有径勤为路>>>>>>>>

<<<<<<<<学海无涯苦作舟!