为什么会RE(Runtime Error)

我也不知道为什么会运行错误啊!各位牛哥救救我!!
代码如下;
```cpp
/*
* VIJOS-1040 高精度乘法
* mike-w
* 2012-10-21
*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define MAXL 10000
#define BASE 10000
#define WIDTH 4

int a[MAXL], b[MAXL], c[MAXL];
char buf[MAXL];

int read(int s)
{
scanf("%s", buf);
int len=strlen(buf);
int w=1, sum=0, p=MAXL-1;
int i;
for(i=len-1; i>=0; i--)
{
sum+=w
(buf[i]-'0');
w*=10;
if(w==BASE)
{
s[p--]=sum;
sum=0;
w=1;
}
}
if(sum)
s[p--]=sum;
return 0;
}

int disp(int *s)
{
int i;
for(i=0; i<MAXL-1; i++)
if(s[i])
break;
printf("%d", s[i++]);
for(; i<MAXL; i++)
printf("%0*d", WIDTH, s[i]);
return 0;
}

int multi(int *s1, int *s2, int *ans)
{
int i, j, c;
for(i=1, c=0; i<=MAXL; i++)
for(j=1; j<=MAXL; j++)
{
ans[MAXL+1-i-j]+=s1[MAXL-i]*s2[MAXL-j]+c;
c=ans[MAXL+1-i-j]/BASE;
if(c)
ans[MAXL+1-i-j]%=BASE;
}
return 0;
}

int main(void)
{
read(a);
read(b);
multi(a, b, c);
disp(c);
putchar('\n');
return 0;
}
```

1 条评论

  • @ 2020-12-19 21:08:34

    我死在50分上了

    #include<bits/stdc++.h>
    #define N 100001
    using namespace std;
    int a[501],b[501],c[501];
    char a1[501],b1[501];
    void convert(char s[],int a[])
    {
    reverse(s,s+strlen(s));
    for(int i=0;i<strlen(s);i++)a[i]=s[i]-48;
    }
    int cheng(int a[],int b[],int lena,int lenb)    
    {
    int x=0,i,j;
    for(i=0;i<lenb;i++)
    {
    x=0;
    for(j=0;j<lena;j++)
    {
    c[i+j]=c[i+j]+a[j]*b[i]+x;
    x=c[i+j]/10;
    c[i+j]=c[i+j]%10;
    }
    c[i+j]=x;
    }
    if(x)
    {
    c[i+j-1]=x;
    return i+j-1;
    }
    else
    return i+j-2;
    }
    void print(int a[],int len)
    {
    while(a[len]==0)len--;
    if(len<0)
    cout<<0;
    else
    for(int i=len;i>=0;i--)cout<<a[i];
    }
    int main()
    {
    int i,j,k,len,w;
    cin>>a1;
    cin>>b1;
    convert(a1,a);
    convert(b1,b);
    len=cheng(a,b,strlen(a1),strlen(b1));
    print(c,len);
    return 0;
    }
    
    #include <iostream>
    
    using namespace std;
    const int N=201;
    string s1,s2;
    int a1[N],a2[2*N],a3[N],a4[N],i,j,k,t;
    int main()
    {
    cin>>s1>>s2;
    int l1=s1.size(),l2=s2.size();
    for(i=0;i<l1;i++)a3[l1-i-1]=s1[i]-'0';
    for(i=0;i<l2;i++)a4[l2-i-1]=s2[i]-'0';
    for(i=0;i<l2;i++){
    for(j=0,k=i;j<l1;j++){
    t=a1[k+j]+a3[j]*a4[i];
    a1[k+j]=t%10;
    a1[k+j+1]=t/10;
    }
    for(k=i;k<=i+l1;k++){
    t=a2[k]+a1[k];
    a2[k]=t%10;
    a2[k+1]+=t/10;
    a1[k]=0;
    }
    }
    for(k=l1+l2-1;a2[k]==0&&k>=0;k--);
    if(k<0)cout<<0;
    while(k>=0) cout<<a2[k--];
    return 0;
    }
    
    #include<bits/stdc++.h>
    using namespace std;
    
    char s[500];
    int a[500], b[500], c[5000];
    void read(int bn[])
    {   
    scanf("%s", s);
    int len = strlen(s);
    bn[0] = len;
    for (int i = 1; i <= len; i++)
    bn[i] = s[len-i] - '0';
    }
    void mul(int a[], int b[], int c[])
    {
    c[0] = a[0] + b[0] - 1;
    for (int i = 1; i <= a[0]; i++)
    for (int j = 1; j <= b[0]; j++)
    {
    c[i+j-1] += a[i] * b[j];
    c[i+j] += c[i+j-1] / 10;
    c[i+j-1] %= 10;
    }
    if (c[c[0] + 1]) c[0]++;
    }
    
    int main()
    {
    read(a);
    read(b);
    mul(a, b, c);
    while(c[c[0]] == 0 && c[0] > 1) c[0]--;
    for(int i = c[0]; i > 0; i--)
    printf("%d", c[i]);
    return 0;
    }
    
  • 1

信息

ID
1040
难度
7
分类
高精度 点击显示
标签
(无)
递交数
16570
已通过
3173
通过率
19%
被复制
28
上传者