高精度乘法出问题
本帖最后由 柿子饼同学 于 2022-6-24 21:30 编辑题目 : https://www.luogu.com.cn/problem/P1303
#include <bits/stdc++.h>
using namespace std;
int l, la, lb;
string f, s;
char op;
short a, b, ans;
void read(){ //把读入字符串转倒序数组
memset(a, 0, sizeof(a)); memset(b, 0, sizeof(b)); memset(ans, 0, sizeof(ans));
la = f.size(); lb = s.size(); l = la > lb ? la : lb;
for(int i = la - 1; i >= 0; i--) a = f - '0';
for(int i = lb - 1; i >= 0; i--) b = s - '0';
}
void print(short x[]){ //打印答案
int num = 4004;
while(!ans && num > 0) --num;
for(int i = num; i >= 0; i--) cout << ans;
cout << endl;
}
void mul(short x[], short y[]){
// 这里直接计算结果中的从低到高第 i 位,且一并处理了进位
// 第 i 次循环为 c 加上了所有满足 p + q = i 的 a 与 b 的乘积之和
for(int i = 0; i < l; i++){
for(int j = 0; j <= i; j++){
ans += x * y;
}
if(ans >= 10){
ans += ans / 10;
ans %= 10;
}
}
}
int main(){
ios::sync_with_stdio(0);
cin >> f >> s;
read();
mul(a, b);
print(ans);
return 0;
}
我代码一直答案错 , 不知道怎么回事
求帮助 , 看看哪里错了{:10_266:} 本帖最后由 jhq999 于 2022-6-25 09:30 编辑
看看
#include <bits/stdc++.h>
using namespace std;
int l, la, lb;
string f, s;
char op;
short a, b, ans;//////////////感觉这里变量类型用char就行了,9*9<255
void read(){ //把读入字符串转倒序数组
memset(a, 0, sizeof(a)); memset(b, 0, sizeof(b)); memset(ans, 0, sizeof(ans));
la = f.size(); lb = s.size(); l = la + lb;
for(int i = la - 1; i >= 0; i--) a = f - '0';
for(int i = lb - 1; i >= 0; i--) b = s - '0';
}
void print(short x[]){ //打印答案
int num = 4004;
while(!ans && num > 0) --num;
for(int i = num; i >= 0; i--) cout << ans;
cout << endl;
}
void mul(short x[], short y[]){
// 这里直接计算结果中的从低到高第 i 位,且一并处理了进位
// 第 i 次循环为 c 加上了所有满足 p + q = i 的 a 与 b 的乘积之和
for(int i = 0; i < la; i++){/////////////////////////////////
for(int j = 0; j <lb; j++){////////////////////////////
ans += x * y;
}
for(int k=0;k<lb;k+=1)///////////////////////////////////////
{
if(ans>9)
{
ans+=ans/10;
ans=ans%10;
}
}
}
}
int main(){
ios::sync_with_stdio(0);
cin >> f >> s;
read();
mul(a, b);
print(ans);
return 0;
}
jhq999 发表于 2022-6-25 07:12
看看
就是被乘数每一位乘完之后就把每一位变成10以内的? jhq999 发表于 2022-6-25 07:12
看看
懂了 , 谢谢 柿子饼同学 发表于 2022-6-25 12:10
就是被乘数每一位乘完之后就把每一位变成10以内的?
就是模拟竖式计算
页:
[1]