Lolitan @ 2024-07-09 16:48:32
#include<bits/stdc++.h>
using namespace std;
int aa[55550],bb[55550],cc[55555];
string a,b;
int m,f,g,h,n=1,k,s,u;
int main(){
cin>>a>>b;
f=a.size();
s=a.size();
u=b.size();
g=b.size();
m=max(a.size()+1,b.size()+1);
for(int i=1;i<=f;i++){
s--;
aa[i]=a[s]-'0';
}
for(int i=1;i<=g;i++){
u--;
bb[i]=b[u]-'0';
}
for(int i=1;i<=m;i++){
for(int j=1;j<=g;j++){
cc[i+j-1]=(aa[i]*bb[j]+cc[i+j-1]);
if(aa[i]*bb[i]>=10){
k=cc[i];
cc[i]%=10;
cc[i+1]=(k-(k%10))/10;
}
}n*=10;
}
for(int i=m+100;i>=1;i--){
if(cc[i]!=0){
h=i;
break;
}
}
for(int i=h;i>=1;i--){
cout<<cc[i];
}
return 0;
}
by a1Ex999 @ 2024-07-09 16:53:31
#include <bits/stdc++.h>
using namespace std;
string s1,s2;
int a[11000],b[11000],c[11000];
int len1,len2,len;
int main(){
cin>>s1>>s2;
if(s1=="0"||s2=="0"){
cout<<0;
return 0;
}
len1=s1.size();
for(int i=1;i<=len1;i++){
a[i]=s1[len1-i]-'0';
}
len2 =s2.size();
for(int i=1;i<=len2;i++){
b[i]=s2[len2-i]-'0';
}
len=len1+len2;
for(int i=1;i<=len1;i++){
for(int j=1;j<=len2;j++){
c[i+j-1]+=a[i]*b[j];
}
}
for(int i=1;i<=len;i++){
if(c[i]>=10){
c[i+1]+=c[i]/10;
c[i]%=10;
}
}
if(c[len]==0) len--;
for(int i=len;i>=1;i--){
cout<<c[i];
}
return 0;
}
可以试试这样
by Lolitan @ 2024-07-09 17:22:34
俢改琎位 依倃爆0
#include<bits/stdc++.h>
using namespace std;
int aa[55550],bb[55550],cc[55555];
string a,b;
int m,f,g,h,n=1,k,s,u;
int main(){
cin>>a>>b;
f=a.size();
s=a.size();
u=b.size();
g=b.size();
m=max(a.size()+1,b.size()+1);
for(int i=1;i<=f;i++){
s--;
aa[i]=a[s]-'0';
}
for(int i=1;i<=g;i++){
u--;
bb[i]=b[u]-'0';
}
for(int i=1;i<=m;i++){
for(int j=1;j<=g;j++){
cc[i+j-1]=(aa[i]*bb[j]+cc[i+j-1]);
}
}
for(int i=1;i<=m;i++){
if(cc[i]>=10){
k=cc[i];
cc[i]%=10;
cc[i+1]+=(k-(k%10))/10;
}
}
for(int i=m+10;i>=1;i--){
if(cc[i]!=0){
h=i;
break;
}
}
for(int i=h;i>=1;i--){
cout<<cc[i];
}
return 0;
}
by a1Ex999 @ 2024-07-09 17:32:32
@Lolitan 24行是不是要去掉+cc[i+j-1]
by Lolitan @ 2024-07-09 17:33:16
改了俩数据 60()
#include<bits/stdc++.h>
using namespace std;
int aa[55550],bb[55550],cc[55555];
string a,b;
int m,f,g,h,n=1,k,s,u;
int main(){
cin>>a>>b;
f=a.size();
s=a.size();
u=b.size();
g=b.size();
m=max(a.size()+1,b.size()+1);
for(int i=1;i<=f;i++){
s--;
aa[i]=a[s]-'0';
}
for(int i=1;i<=g;i++){
u--;
bb[i]=b[u]-'0';
}
for(int i=1;i<=f;i++){
for(int j=1;j<=g;j++){
cc[i+j-1]=(aa[i]*bb[j]+cc[i+j-1]);
}
}
for(int i=1;i<=m+10000;i++){
if(cc[i]>=10){
k=cc[i];
cc[i]%=10;
cc[i+1]+=(k-(k%10))/10;
}
}
for(int i=m+1000;i>=1;i--){
if(cc[i]!=0){
h=i;
break;
}
}
for(int i=h;i>=1;i--){
cout<<cc[i];
}
return 0;
}
by a1Ex999 @ 2024-07-09 17:33:57
好像这样也过不了,我试了下
by Lolitan @ 2024-07-09 17:50:25
@LYX710Staly 找到問偍了 前导0部分沒扫到 而且少一个0的特判 AC
#include<bits/stdc++.h>
using namespace std;
int aa[55550],bb[55550],cc[55555];
string a,b;
int m,f,g,h,n=1,k,s,u;
int main(){
cin>>a>>b;
f=a.size();
s=a.size();
u=b.size();
g=b.size();
m=max(a.size()+1,b.size()+1);
for(int i=1;i<=f;i++){
s--;
aa[i]=a[s]-'0';
}
for(int i=1;i<=g;i++){
u--;
bb[i]=b[u]-'0';
}
for(int i=1;i<=f;i++){
for(int j=1;j<=g;j++){
cc[i+j-1]=(aa[i]*bb[j]+cc[i+j-1]);
}
}
for(int i=1;i<=m+50000;i++){
if(cc[i]>=10){
k=cc[i];
cc[i]%=10;
cc[i+1]+=(k-(k%10))/10;
}
}
for(int i=m+50000;i>=1;i--){
if(cc[i]!=0){
h=i;
break;
}
if(i==1&&cc[1]==0){
cout<<0;
return 0;
}
}
for(int i=h;i>=1;i--){
cout<<cc[i];
}
return 0;
}