高精度算法问题
#include <iostream>using namespace std;
int x = {0}, y = {0}, z = {0}, s = {0} ;
int main() {
int d = 0;
string a, b, n;
cin >> a >> b;
for (int i = 1; i <= a.size(); i++) {
x = a - 48;
}
for (int i = 0; i <= a; i++) {
x == x;
}
for (int i = 1; i <= b.size(); i++) {
y = b - 48;
}
for (int i = 0; i <= a; i++) {
y == y;
}
for (int i = 0; i <= max(a.size(), b.size()); i++) {
n = x * y;
for (int j = 1; j <= n.size(); j++) {
s = n - 48;
}
for (int i = 0; i <= s; i++) {
s == s;
}
for (int l = d; l <= max(a.size(), b.size()); l++) {
s == z;
cout << s << endl;
}
d++;
}
for (int i = 0; i <= 504; i++) {
cout << z << endl;
}
return 0;
}
我想要做一个高精度乘法的算法为什么输出的全是0 这段代码存在一些问题,让我们来逐步解决它们:
1. 首先是变量的定义不正确。变量x、y、z、s应该是数组类型,而不是单个整数。你可以将它们定义为int类型的数组。
2. 其次是缺少一对大括号来表示for循环的循环体。在for循环后面加上一对大括号{}。
3. 接下来是d变量的初始化问题。你可以在for循环之前将d初始化为0。
4. 最后是字符串a和b的输入问题。你可以使用getline函数来读取整行的字符串,而不是使用cin直接读取字符串。因为cin会在遇到空格或者换行符时停止读取。所以,如果a和b之间有空格,那么只能读取到a的值。
下面是修改后的代码:
#include <iostream>
using namespace std;
int main() {
int x = {0};
int y = {0};
int z = {0};
int s = {0};
int d = 0;
string a, b, n;
getline(cin, a);
getline(cin, b);
for (int i = 1; i < a.length(); i++) {
x = a - '0';
}
for (int i = 1; i < b.length(); i++) {
y = b - '0';
}
for (int i = 1; i <= max(a.length(), b.length()); i++) {
z = x + y + d;
d = z / 10;
z %= 10;
}
if (d > 0) {
z = d;
}
for (int i = max(a.length(), b.length()) + 1; i >= 1; i--) {
cout << z;
}
return 0;
}
希望这次的回答对你有帮助!如果你还有其他问题,请随时提问。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 本帖最后由 sfqxx 于 2023-12-16 22:45 编辑
你的代码有几个问题:
- `x == x[ i];` 这是在判断两个数是否相等,而不是赋值。
- `n = x[ i] * y[ i];` n是一个字符串, x[ i]、y[ i] 是两个整数,两者不能相乘。
- 在你的代码中,所有z[ i]的值从未被改变过,所以z[ i]永远为0; s == z这个语句是比较s和z,但是你要的应该是将s的值赋给z,应写作s = z。
这些修改你的代码后如下,进行了高精度乘法操作:
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
const int MAXN = 2005;
int a={0},b={0},c={0};
int main()
{
string str1,str2;
cin>>str1>>str2;
int len1=str1.length();
int len2=str2.length();
for(int i=len1-1;i>=0;i--)
a=str1-'0'; //将str1倒序存储到a中,方便从个位开始逐位相乘
for(int i=len2-1;i>=0;i--)
b=str2-'0'; //同上
for(int i=1;i<=len1;i++)
for(int j=1;j<=len2;j++)
c+=a*b; //根据乘法术算法进行累加
for(int i=1;i<=len1+len2;i++)
{
c+=c/10; //进位
c%=10; //取余数
}
int len=len1+len2;
while(c==0 && len>1) len--; //去掉前导0
for(int i=len;i>=1;i--)
cout<<c; //逆序输出
return 0;
}
这个程序在做高精度乘法的时候,用了竖式计算的方法,然后对数字进位。
求最佳答案{:10_254:}
页:
[1]