这是洛谷p1303题,题目如下:
给出两个非负整数,求它们的乘积。
每个非负整数不超过10的2000次方
输入格式:
输入共两行,每行一个非负整数
输出格式:
输出一个非负整数表示乘积。
我的代码在本地编译能过而且答案是对的,上传到洛谷之后却一直wa,大家帮帮忙看看是怎么回事把
代码如下:
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
char n[2000],m[2000];
int k[2000]={0};
cin.getline(n,2001);
cin.getline(m,2001);//读取m和n两个数字
if(n[0]=='0'||m[0]=='0')//如果有一个是零就直接打印0
{
cout<<'0';
exit(0);
}
int lenm=strlen(m);//lenm表示m的长度
int lenn=strlen(n);//lenn表示n的长度
int in,im,ik=0;//im,in,ik分别作为三个数组的下标
for(in=lenn-1;in>=0;in--)//循环嵌套模拟手算乘法,就是高精乘
{
for(im=lenm-1,ik=lenn-1-in;im>=0;im--)
{
k[ik]+=((n[in]-'0')*(m[im]-'0'));
k[ik+1]+=k[ik]/10;
k[ik]%=10;
ik++;
}
}
if(k[ik]!=0)//检查最后一个是否进位,如果是0说明没进位,否则就是有进位,打印该值
{
cout<<k[ik];
}
for(int i=ik-1;i>=0;i--)//倒序打印数字
{
cout<<k[i];
}
}