C语音的Java 2022-02-16 14:18 采纳率: 50%
浏览 138

问题描述   输入两个整数a和b,输出这两个整数的和。a和b都不超过100位。

问题遇到的现象和发生背景

问题描述
  输入两个整数a和b,输出这两个整数的和。a和b都不超过100位。

问题相关代码,请勿粘贴截图
//高精度加法
#include <stdio.h>
#define N 100
int Scanner(char T[])
{
    int i=0;
    scanf("%c",&T[i++]);
    while(T[i-1]>='0'&&T[i-1]<='9'){
        scanf("%c",&T[i++]);
    }
    return (i);
}
void px(char x[],int n)
{
    int i = 0;
    for(i;i<n-i;i++){
        char t = x[i];
        x[i] = x[n-i-1];
        x[n-i-1] = t;
    }
}
void Print_String(char max_s[],char min_s[],int max,int min)
{
    int i;
    for(i=0;i<min;i++){
        max_s[i]-=48;
        min_s[i]-=48;
        max_s[i]+=min_s[i];
        if(max_s[i]>9){
            max_s[i]-=10;
            max_s[i+1]+=1;
        }
    }
    if(max_s[i]==1){
        printf("1");
    }
    for(max;max>0;max--){
        if(max_s[max-1]>47){
            printf("%d",max_s[max-1]-48);
        }
        else if(max_s[max-1]<0){
            break;
        }
            else{
        printf("%d",max_s[max-1]);    
        }
    }
}
int main()
{
    char a[N],b[N];
    int a_xb = Scanner(a);
    int b_xb = Scanner(b);
    px(a,a_xb);
    px(b,b_xb);
    if(a_xb<b_xb){
    Print_String(b,a,b_xb,a_xb);    
    }else{
        Print_String(a,b,a_xb,b_xb);
    }
    return 0;
}

运行结果及报错内容

这个是蓝桥杯里 的一个习题,在提交的时候显示错误,请问我这个在哪里还有缺陷,我已经找不到了擦,
在我的输出函数中,最后一个字符为负数,这是为什么,

我的解答思路和尝试过的方法
我想要达到的结果
  • 写回答

2条回答 默认 最新

  • piaoyiren 2022-02-16 14:29
    关注
    
    #include<stdio.h>
    #include<string.h>
    char c[1002]={0};
    int a[1000]={0};
    int b[1000]={0};
    int sum(int a[],int c1,int b[],int c2){
        int n=0;
        int r=0;
        bool flag = true; 
        
        for(int i=0;i<=c1;i++){
             int d = 0;
             if(i<c2){
                 
                d = a[i]+b[i]+r; 
             }else if(i<c1){
                 if(r==0){
                     n=c1;
                     c[i]=a[i]+'0';
                     flag=false;
                     //break;
                 }else{
                     d=a[i]+r;
                 }
                     
             }else if(r>0){
                 c[c1]='1';
                n=c1+1;    
                break;
             }
             r=0;
             if(flag){
                 if(d>=10){
                     r=1;
                    c[i]=(d-10)+'0';
                 }else{
                     c[i]=d+'0';
                 }             
             }
             
        }    
        return n;
    }
    int main(){
         int i,c1,z,c2;
         printf("请输入a的值:");
         scanf("%s",c);
         c1=strlen(c);
         for(i=0;i<=c1-1;i++){
            a[c1-1-i]=c[i]-'0'; 
         }
          printf("请输入b的值:");
          scanf("%s",c);
         c2=strlen(c);
         for(i=0;i<=c2-1;i++){
               b[c2-1-i]=c[i]-'0';
         }
         if(c1>=c2){
              z=sum(a,c1,b,c2);
         }else{
              z=sum(b,c2,a,c1);
         }
         for(i=z-1;i>=0;i--)
           printf("%c",c[i]);
        return 0;
    }
    
    评论

报告相同问题?

问题事件

  • 创建了问题 2月16日