evil_paramecium @ 2024-01-06 22:47:30
#include<bits/stdc++.h>
using namespace std;
int a[10010],b[10010],c[10010];
int lena,lenb,lenc;
char n[10010],m[10010];
int main(){
cin>>n>>m;
lena=strlen(n);
lenb=strlen(m);
for(int i=1;i<=lena;i++){
a[lena-i]=n[i]-'0';
}
for(int i=1;i<=lenb;i++){
b[lenb-i]=m[i]-'0';
}
cout<<lena<<lenb
for(int i=1;i<=lenb;i++){
int x=0;
for(int j=1;j<=lena;j++){
c[i+j-1]+=a[j]*b[i];
x=c[i+j-1]/10;
c[i+j-1]%=10;
}
c[i+lena]=x;
}
lenc=lena+lenb;
while((lenc>1) and (c[lenc]==0)){
lenc--;
}
for(int i=lenc;i>=1;i--){
cout<<c[i];
}
cout<<endl;
return 0;
}
by _C_language_ @ 2024-01-06 23:08:21
用的是高精度吗?
by _C_language_ @ 2024-01-06 23:08:57
瓦是萌新
by Rose_Oierup69 @ 2024-01-06 23:18:21
哥你是不是不会写高精度啊?先去网上学一学高精度怎么写吧
by _zuoqingyuan @ 2024-01-06 23:22:44
#include<bits/stdc++.h>
using namespace std;
int a[10010],b[10010],c[10010];
int lena,lenb,lenc;
char n[10010],m[10010];
int main(){
cin>>n>>m;\\字符串下标从零开始
lena=strlen(n);
lenb=strlen(m);
for(int i=1;i<=lena;i++){
a[lena-i+1]=n[i-1]-'0';
}
for(int i=1;i<=lenb;i++){
b[lenb-i+1]=m[i-1]-'0';
}//这里的转换有问题
for(int i=1;i<=lenb;i++){
int x=0;
for(int j=1;j<=lena;j++){
c[i+j-1]+=a[j]*b[i]+x;//进位要加x
x=c[i+j-1]/10;
c[i+j-1]%=10;
}
c[i+lena]=x;
}
lenc=lena+lenb;
while((lenc>1) and (c[lenc]==0)){
lenc--;
}
for(int i=lenc;i>=1;i--){
cout<<c[i];
}
cout<<endl;
return 0;
}
by Rose_Oierup69 @ 2024-01-06 23:25:04
大概看了一眼,你的数据处理部分好像没啥问题,但是你连高精度输入的代码都写错了,所以肯定只会输出0了
先把输入的数据用字符串存储起来,然后再用循环一个一个地把字符串里的数据存进数组里 存进数组里的数相对于原数是倒序的
void input(int a[]){ string s; cin>>s; a[0]=s.length(); for(int i=1;i<=a[0];i++) a[i]=s[a[0]-i]-'0'; return; } (其中c[0]存的是数据的长度,等同于你的lenc)
by _zuoqingyuan @ 2024-01-06 23:32:40
@Rose_Oierup69 您markdown炸了?
by Rose_Oierup69 @ 2024-01-06 23:35:17
@zuoqingyuan 第一次用markdown(捂脸)