代码求助
  • 板块灌水区
  • 楼主zljhenry
  • 当前回复0
  • 已保存回复0
  • 发布时间2021/4/23 10:24
  • 上次更新2023/11/5 00:13:47
查看原帖
代码求助
363144
zljhenry楼主2021/4/23 10:24

一个高精的代码,为什么输出是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;
}//我太菜了

谢谢!

2021/4/23 10:24
加载中...