通过函数返回数组指针无法得到正确结果
查看原帖
通过函数返回数组指针无法得到正确结果
332262
Sukidayo楼主2020/10/10 09:27

如题,比如我输入11*11,可以通过数组下标最后三位来输出121,但是放进循环来判断第一位非0,再输出就会出现奇怪的数字,代码如下,恳请大佬帮忙解答!

#include<bits/stdc++.h>
using namespace std;
void change(int *a,string x,int len1,int len2){
    for(int i=0;i<len1;i++){
        a[len2-1-i]=x[len1-1-i]-'0';
    }
}
int* multipy(int *a,int *b,int len1,int len2){
	int c[4002]={0};
	for(int i=0;i<len2;i++){
		for(int j=0;j<len1;j++){
			if(b[len2-1-i]==0)
				break;
			c[4001-1-j-i]=a[len1-1-j]*b[len2-1-i]+c[4001-1-j-i];
			if(c[4001-1-j-i]>9){
				c[4001-2-j-i]=c[4001-2-j-i]+c[4001-1-j-i]/10;
				c[4001-1-j-i]=c[4001-1-j-i]%10;
			}
		}
	}
	return c;
}
int main(){
    int a[2001]={0},b[2001]={0},*c;
    string x,y;
    cin>>x>>y;
    change(a,x,x.size(),sizeof(a)/sizeof(a[0]));
    change(b,y,y.size(),sizeof(b)/sizeof(b[0]));
    if(x.size()>y.size()){
    	c=multipy(a,b,sizeof(a)/sizeof(a[0]),sizeof(b)/sizeof(b[0]));
	}   		
    else{
    	c=multipy(b,a,sizeof(b)/sizeof(b[0]),sizeof(a)/sizeof(a[0])); 
	}
   //输入11 11,这里cout<<c[3998]<<c[3999]<<c[4000];就没问题,但是下面的会出错。
	for(int i=0;i<4001;i++){
			if(c[i]!=0){
				cout<<i<<endl;
				while(i<4001){
					cout<<c[i];
					i++;
				}
				return 0;
			}
		}
	cout<<0;	
    return 0;
}
2020/10/10 09:27
加载中...