C、C++一道大数处理题,帮忙改一下代码,结果不对

A+B 进阶版
Description
输入为两个整数 A B请输出A+B
Input
两个数字以空格分割,如1234567 1111111
Output
输入的两个数的和
Sample Input 1 :1234567 1111111
Sample Output 1:2345678 

以下是我的代码

#include<stdio.h>
#include<iostream>
#include<math.h>
#include<string.h>
using namespace std;

int main(){
    char num1[1000];
    char num2[1000];
    char num[1000];
    int m,n;
    cin>>num1;
    cin>>num2;
    m=strlen(num1);
    n=strlen(num2);

    int i,j;
    i=m;
    j=n; 
    int k=0;
    while(i>0||j>0){
        int s1=0,s2=0;
        int flag=0;
        s1=num1[i-1]-48;
        s2=num2[j-1]-48;
        i--;
        j--;
        if(s1+s2<9){
            if(flag==0){
                num[k]=(char)(s1+s2);
            }
            else{
                s1+s2+1>9?flag=1:flag=0;
                cout<<flag;
                if(flag==0)
                    num[k]=(char)(s2+s1+1);
                 else{
                     num[k]=(char)((s1+s2+1)%10);
                     flag=1;
                 } 
            }
        
            k++;    
        }
        else{
            num[k]=(char)((s1+s2)%10);
            flag=1;
            k++;
        }
    
    }
        cout<<k;
        for(int q=k;q>=0;q--){
            cout<<num[q];
        }    
}

 

while(i>0||j>0)

 s1=num1[i-1]-48;

s2=num2[j-1]-48;

如果两个数位数不相等,比如i比j大,那i==0的时候,j>0,进入循环, s1=num1[i-1]-48坐标就是-1了

s1=num1[i-1]-48;
s2=num2[j-1]-48;

这里为什么要-48?

哦哦,突然明白了

数字0的ASCII码是48

想把char 类型数组里的转化为数字

不知到怎么转化位数字

我把while循环的条件||改成了&&,但是程序结果是一个数字加一堆框

求解答

循环结束后,位数多的那个数剩下的数字你要补上去

而且num[k]是没有值的

#include<stdio.h>
#include<iostream>
#include<math.h>
#include<string.h>
using namespace std;

int main(){
    char num1[1000];
    char num2[1000];
    char num[1000];
    int m,n;
    cin>>num1;
    cin>>num2;
    m=strlen(num1);
    n=strlen(num2);
    
    int i,k=0,sum=0,big;//i用来循环,k是进位,sum用来记录每一位对应相加的结果,big取最长的、用来最后for输出
    if(m>=n){
        big=m;
        for(i=m-1;i>=0;i--){//从最低位到最高位依次相加
            if(i<m-n){//由于两组长度可能不同,这里就要判断,短的走完了就不能再取
                sum = (num1[i] - '0') + k;//数组是char类型,需要ASCII码相减得出对应的数字
            }else{
                sum = (num1[i] - '0') + (num2[i-m+n] - '0') + k;
            }
            num[i] = sum%10 + '0';//加'0'转换成数字对应的ASCII
            k= sum/10;//进位
        }
    }else{
        big=n;
        for(i=n-1;i>=0;i--){
            if(i<n-m){
                sum = (num2[i] - '0') + k;
            }else{
                sum = (num1[i-n+m] - '0') + (num2[i] - '0') + k;
            }
            num[i] = sum%10 + '0';
            k= sum/10;//进位
        }
    }
    
    if(k>0){//最高位可能会有进位
        cout << k;
    }
    
    for(i=0;i<big;i++){
        cout << num[i];
    }
}