You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TDM-GCC编译高精度加法代码出现int转int*错误的修复求助

错误原因与修复方案

核心错误原因

你在main函数里定义了局部变量int c=0;,而全局作用域已经存在数组int c[MAXN];。C++中局部变量会覆盖同名的全局变量,导致调用add(c,a,b)和output(c)时,编译器使用的是局部的int类型变量c,但add和output函数要求的参数是int*(数组作为参数传递时会退化为指针),因此触发了int转int*的非法转换错误。

修复步骤

  1. 重命名局部变量:将main里的int c=0;改成其他名字,比如int case_cnt=0;,同时修改后续输出语句里的++c为++case_cnt,避免和全局数组c冲突。
  2. 修复循环增量错误:main中的for(int r=0;r<t;t++)是错误的,循环增量应该是r++而不是t++,否则循环无法正常执行。

修复后的完整代码

#include <iostream>
using namespace std;
const int MAXN=1005;
int a[MAXN],b[MAXN],c[MAXN];

void input(int a[]){    
    string s;    
    cin >> s;    
    int len=s.length();    
    for(int i=0;i<MAXN;i++) a[i]=0;    
    for(int i=len-1;i>=0;i-=4){        
        a[0]++;        
        for(int j=max(0,i-3);j<=i;j++){            
            a[a[0]] *= 10;            
            a[a[0]] += s[j]-'0';        
        }    
    }
}

void output(int a[]){    
    for(int i=a[0];i;i--){        
        if(i==a[0])            
            cout << a[i];        
        else{            
            int tmp=1000;            
            for(int j=1;j<=4;j++){                
                cout << a[i]/tmp%10;                
                tmp /= 10;            
            }        
        }    
    }
}

void add(int c[],int a[],int b[]){    
    for(int i=0;i<MAXN;i++) c[i]=0;    
    c[0]=max(a[0],b[0]);    
    for(int i=1;i<=c[0];i++){        
        if(i<=a[0]) c[i]+=a[i];        
        if(i<=b[0]) c[i]+=b[i];    
    }    
    for(int i=1;i<=c[0];i++){        
        c[i+1] += c[i]/10000;        
        c[i] %= 10000;    
    }    
    while(c[c[0]+1]>0){        
        c[0]++;        
        c[c[0]+1] = c[c[0]]/10000;        
        c[c[0]] %= 10000;    
    }
}

int main(){    
    int t,case_cnt=0;    
    cin >> t;    
    for(int r=0;r<t;r++){        
        input(a);        
        input(b);        
        add(c,a,b);        
        cout << "Case " << ++case_cnt << ":" << endl;        
        output(a);        
        cout << " + ";        
        output(b);        
        cout << " = ";        
        output(c);        
        cout << endl << endl;    
    }    
    return 0;
}

内容的提问来源于stack exchange,提问作者GavinCQTD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 19:47:39