自己输入算的都对,一提交都错,求助

P1303 A*B Problem

数据每问题呀,给你份代码,自己去对拍 ```cpp //高精度乘法 #include<bits/stdc++.h> using namespace std; void fan(string &x,int len){//翻转字符串x for(int i=0;i<=(len-1)/2;i++)swap(x[i],x[len-i-1]); } string strcopy(string a,int l,int r){//复制字符串a从l到r的字串 string ret=""; for(int i=l;i<=r;i++)ret+=a[i]; return ret; } string qu(string str){ string ret=""; bool infirst=1; int len=str.size(); for(int i=0;i<len;i++){ if(infirst){ if(str[i]=='0')continue; infirst=0; } ret+=str[i]; } if(ret=="")ret="0"; return ret; } string max(string a,string b){//返回a,b中较大的数 a=qu(a);b=qu(b); int lena=a.size(),lenb=b.size(); if(lena>lenb)return a; else if(lenb>lena)return b; for(int i=0;i<lena;i++){ if(a[i]>b[i])return a; else if(b[i]>a[i])return b; } return a; } int max(int a,int b){//整型max if(a>b)return a; return b; } string mul(string stra,string strb){//高精度乘法 /* 操作流程: 1 4 * 1 2 3 --------- ? ? ? 1.循环枚举并相乘 0 0 3*1*10 3*4*1 0 2*1*100 2*4*10 1*1*1000 1*4*100 0 0 2.相加 3*1*10+3*4*1+2*1*100+2*4*10+1*1*1000+1*4*100=1722 3.判0+返回 1 4 * 1 2 3 ------------ 1 7 2 2 */ int a[1001],b[1001],ans[2001];//数组储存,防止爆char int lena=stra.size(),lenb=strb.size(),len=lena+lenb;//获取字符串长度 for(int i=0;i<lena;i++)a[i+1]=stra[i]-'0';//转移到数组 for(int i=0;i<lenb;i++)b[i+1]=strb[i]-'0';//转移到数组 memset(ans,0,sizeof ans);//清空ans数组 for(int i=1;i<=lena;i++){//枚举数位相乘 for(int j=1;j<=lenb;j++){//枚举数位相乘 int qz=lena-i+lenb-j+1;//计算权值 ans[qz]+=a[i]*b[j]; ans[qz+1]+=(ans[qz]/10);//进位 ans[qz]%=10;//进位 } } for(int i=1;i<len;i++){//再次处理进位 ans[i+1]+=ans[i]/10;//进位 ans[i]%=10;//进位 } string ret="";//返回的字符串 bool infirst=1;//用于去除前导零 for(int i=len;i>=1;i--){ if(infirst){ if(ans[i]==0)continue;//前导零不输出 infirst=0;//后面的都输出 } ret+=(ans[i]+'0');//加入到输出的字符串中 } if(ret=="")ret="0";//判0 return ret; } int main(){ string a,b; cin>>a>>b; cout<<mul(a,b); return 0; } ```
by Believe_in_dreams @ 2024-02-25 19:57:18


``` #include<stdio.h> #include <string> #include <iostream> using namespace std; int main() { int a[2100] = { 0 }, b[2100] = { 0 }, c[4200] = { 0 }; int c1 = 0, c2 = 0, c3 = 0, i = 0, j = 0, k = 0, max = 0; string a1,b1; cin >> a1 >> b1; for(int i=0;i<a1.size();i++) { a[c1++]=a1[i]-'0'; } for(int i=0;i<b1.size();i++) { b[c2++]=b1[i]-'0'; } for (i = c1-1; i >= 0; i--)//竖式乘法实现,结果逆序输入 { if (a[i] == 0) continue; for (j = c2-1; j >= 0; j--) { if (b[j] == 0) continue; c3 = c2 - j - 1 + c1 - i - 1;//数字填充的位数 k = a[i] * b[j]; while (k != 0)//进位 { c[c3] += k % 10; k /= 10; max = c3 > max ? c3 : max; c3++; } } } for (i = 0; i <= max; i++)//进位 { if (c[i] >= 10) { c3 = i + 1; k = c[i]; c[i] %= 10; k /= 10; while (k != 0) { c[c3] += k % 10; k = k / 10; max = c3 > max ? c3 : max; c3++; } } } for (i = max; i >= 0; i--)//逆序输出 { printf("%d", c[i]); } return 0; }
by Chenjunyu2010 @ 2024-02-25 20:37:04


@[Chenjunyu2010](/user/725993) 是输入数据方式的问题吗
by _Persever_ance @ 2024-02-25 20:44:45


我不知道(我也是个蒟蒻),感觉怪怪的,我用C++写就过了,可能是吧
by Chenjunyu2010 @ 2024-02-25 20:46:36


用python3逝逝
by chen13535281510 @ 2024-02-29 15:28:01


那个啥,我直接a*b简单明了的AC了,你们为什么想这么复杂啊??(思索
by SereneMaizi_ @ 2024-03-03 11:47:44


@[_Persever_ance](/user/1283833) 对啊
by a13805065538 @ 2024-05-13 21:59:44


|