zhanghanyuqqqq 2023-08-20 10:19 采纳率: 100%
浏览 4
已结题

关于#c++#的问题:这是一段解决高精度3的n次方程序


#include <bits/stdc++.h>
using namespace std;
int x[1000],n;
string cheng(string a,int b) {
    //cin>>a>>b;
    int la=a.size();
    for(int i=0;i<la;i++){
        x[i]=a[la-i-1]-'0';
    }
    for(int i=0;i<la;i++){
        x[i]=x[i]*b;
    }
    for(int i=0;i<la;i++){
        x[i+1]+=x[i]/10;
        x[i]%=10;
    }
    while(x[la]!=0){
        x[la+1]+=x[la]/10;
        x[la]%=10;
        la++;
    }
    int l=la;
    while(x[l]==0 && l>0){
        l--;
    }
    for(int i=l;i>=0;i--){
        a[i]=x[i];
    }
    return a;
    
    
}
string s(int n){
    //cin>>n;
    
    string sum="1";
    for(int i=0;i<n;i++){
        sum=cheng(sum,3);
    }
    return sum;
}
int main(){
    int e; 
    cin>>e;
    string f=s(e);
    cout<<f;
    return 0;

    
}

这是一段解决高精度3的n次方
程序,请各位看看错在哪里

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-08-20 12:24
    关注

    【以下回答由 GPT 生成】

    问题标题: 优化高精度乘法程序

    问题标签: c++

    问题描述:

    请帮我优化一段解决高精度乘法的程序,目前存在一些问题。以下是程序代码:

    #include <bits/stdc++.h>
    using namespace std;
    
    int x[1000], n;
    
    string cheng(string a, int b) {
        int la=a.size();
        for(int i=0; i<la; i++){
            x[i]=a[la-i-1]-'0';
        }
        for(int i=0; i<la; i++){
            x[i]=x[i]*b;
        }
        for(int i=0; i<la; i++){
            x[i+1]+=x[i]/10;
            x[i]%=10;
        }
        while(x[la]!=0){
            x[la+1]+=x[la]/10;
            x[la]%=10;
            la++;
        }
        int l=la;
        while(x[l]==0 && l>0){
            l--;
        }
        for(int i=l; i>=0; i--){
            a[i]=x[i];
        }
        return a;
    }
    
    string s(int n){
        string sum="1";
        for(int i=0; i<n; i++){
            sum=cheng(sum, 3);
        }
        return sum;
    }
    
    int main(){
        int e; 
        cin>>e;
        string f=s(e);
        cout<<f;
        return 0;
    }
    

    请你帮我检查一下代码,看看哪里有问题,并且能否对代码进行优化。谢谢!


    解决方案:

    1. 高精度乘法程序存在的问题:

    2. 在函数cheng中, 数组x的大小固定为1000,因此当高精度数超过1000位时,会导致数组越界错误。

    3. 在函数cheng中, 将string类型转换为int类型,进行乘法运算后再转换回string类型,这样会丧失高精度。例如:当乘法运算的结果超过int类型的表示范围时,就会计算错误。
    4. 在函数cheng中, 在进行进位操作时,没有考虑到数组越界的问题,可能导致未定义行为。

    5. 优化高精度乘法程序:

    6. 使用vector类型来存储高精度数,可以动态调整大小,避免数组越界错误。

    7. 使用字符串相减的方式来实现高精度乘法,避免数据类型转换和损失高精度的问题。

    下面是优化后的代码:

    #include <iostream>
    #include <vector>
    using namespace std;
    
    string multiply(string num1, int num2) {
        vector<int> res;
        int carry = 0;
    
        for (int i = num1.size() - 1; i >= 0; i--) {
            int digit = (num1[i] - '0') * num2 + carry;
            res.insert(res.begin(), digit % 10);
            carry = digit / 10;
        }
    
        while (carry > 0) {
            res.insert(res.begin(), carry % 10);
            carry /= 10;
        }
    
        string result;
        for (int digit : res) {
            result += (digit + '0');
        }
    
        return result;
    }
    
    string powerOfThree(int n) {
        string result = "1";
        for (int i = 0; i < n; i++) {
            result = multiply(result, 3);
        }
        return result;
    }
    
    int main() {
        int e;
        cin >> e;
        string f = powerOfThree(e);
        cout << f << endl;
        return 0;
    }
    

    这个优化后的代码能够解决原代码存在的问题,并且可以正确地计算高精度乘法。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 9月9日
  • 已采纳回答 9月1日
  • 创建了问题 8月20日

悬赏问题

  • ¥30 搭建面包板由NE555N和SN74LS90N组成的计时电路时出了问题
  • ¥15 无源定位系统的时差估计误差标准差
  • ¥15 请问这个代码哪里有问题啊
  • ¥20 python--version在命令端输入结果Python is not defined怎么办?还有pip不是exe格式是不是没安装成功?
  • ¥15 通过GaussianView进行结构微调消除虚频
  • ¥15 调用transformers库
  • ¥15 由于导出的数据名字中带有/,导致Matlab打不开,怎么办?
  • ¥15 新硬盘安装的程序总是崩溃,提示遇到错误
  • ¥15 openpcdet自制数据集评估bev精度和3d精度相同
  • ¥15 excel 上下按钮 显示行