一个高精的代码,为什么输出是0?
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int MW=512; //能表示512*8=4096位数
const int MD=100000000;//MD为进制
char A[10001],B[10001];
ll a[MW],b[MW],c[MW];
void jia(ll *a,ll *b,ll *c){
ll jw=0L;
int i;
for(i=0;i<MW;i++){
c[i]=a[i]+b[i]+jw;
jw=c[i]/MD;
c[i]%=MD;
//cout<<"!"<<endl;
}
}
void jian(ll *a,ll *b,ll *c){//减法
ll jw=0L;//借位
for(int i=0;i<MW;i++){
if(a[i]-jw<b[i]){//不够减
c[i]=MD+a[i]-jw-b[i];
jw=1;
}else{
c[i]=a[i]-jw-b[i];
jw=0;
}
}
}
void cheng1(ll *a,ll b,ll *c){//高精乘低精
ll jw=0L;
int i,j;
for(int i=0;i<MW;i++){
c[i]=(a[i]*b)+jw;
jw=c[i]/MD;
c[i]%=MD;
}
}
void cheng2(ll *a,ll *b,ll *c){
ll jw=0L;
int i,j,t1=1,t2=1;
for(i=MW-1;i>0;i--) if(a[i]!=0){ t1=i+1;break; }
for(i=MW-1;i>0;i--) if(b[i]!=0){ t2=i+1;break; } //找b最高有效位
for(i=0;i<MW;i++) c[i]=0;
for(i=0;i<t1;i++){
jw=0L;
for(j=0;i+j<MW&&j<t2;j++){
c[i+j]+=(a[i]*b[i]+jw);
jw=c[i+j]/MD;
c[i+j]%=MD;
}
}
}
int main(){
//输入
scanf("%s%s",A,B);
int lena=strlen(A),lenb=strlen(B);
//处理
for(int i=0;i<(lena+7)/8;i++)
sscanf(A+lena-(i+1)*8,"%08d",&a[i]);
for(int i=0;i<(lenb+7)/8;i++)
sscanf(B+lenb-(i+1)*8,"%08d",&b[i]);
//运行
jia(a,b,c);
//输出
int i=0;
for(i=MW-1;i>=0;i--)
if(c[i]!=0) break;
printf("%d",c[i]);
i--;
for(;i>=0;i--) printf("%08d",c[i]);
return 0;
}//我太菜了
谢谢!