为什么我的这个大数相加程序在oj上跑出来的结果是OLE

 #include<stdio.h>
#include<string.h>
int main()
{
    char str1[1001],str2[1001],*num1,*num2,*p1,*p2;
    int ncase/*多组输入数目*/,mcase=1/*输出时的第几个输出计数器*/,up/*进位存储器*/,len1,len2,len;
    scanf("%d",&ncase);
    while(ncase--)
    {
        scanf("%s %s",str1,str2);
        printf("case %d:\n",mcase++);
        printf("%s + %s = ",str1,str2); 
        len1=strlen(str1);/*分别计算两数长度*/
        len2=strlen(str2);
        if( len1 >= len2 )/*把num1赋较大数的数组首地址num2赋较小数的数组首地址,且保证len1存长数组长度len2存短数组长度*/
        {
            num1=str1;
            num2=str2;
        }
        else
        {
            num1=str2;
            num2=str1;
            len=len1;
            len1=len2;
            len2=len;
        }
        up=0;/*进位赋初值0*/
        for(p1=num1+len1-1,p2=num2+len2-1;p1>=num1;p1--,p2--)/*从各自最小位逐位相加,以较大数的最高位为边界*/
        {
            if( p2 < num2 )/*当高位无数时补0*/
                *p2=48;
            *p1=*p1+*p2-96+up;/*由ascII码值化为十进制值*/
            up=0;
            if( *p1 >= 10 )/*如果此位相加结果十进制值大于10则作减10处理*/
            {
                *p1-=10;
                up=1;/*进位寄存器赋1*/
            }
            *p1+=48;/*再次化为ascII码以供输出*/
        }
        if( up == 1 )/*当最高位加上进位仍产生进位则需于前再输出一个“1”*/
            printf("1");
        printf("%s\n",num1);/*输出经加法处理改动的大数组*/
        printf("\n");
    }
    return 0;
}

  • 不知道是你代码的问题还是你贴代码上来转换的原因。缺少若干个*
  • 修改后的代码如下所示
  • 下次贴代码的时候记得用“插入代码片”的功能
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
    char str1[1001], str2[1001], *num1, *num2, *p1, *p2;
    int ncase/*多组输入数目*/, mcase = 1/*输出时的第几个输出计数器*/, up/*进位存储器*/, len1, len2, len;
    scanf("%d", &ncase);
    while (ncase--)
    {
        scanf("%s %s", str1, str2);
        printf("case %d:\n", mcase++);
        printf("%s + %s = ", str1, str2);
        len1 = strlen(str1);/*分别计算两数长度*/
        len2 = strlen(str2);
        if (len1 >= len2)/*把num1赋较大数的数组首地址num2赋较小数的数组首地址,且保证len1存长数组长度len2存短数组长度*/
        {
            num1 = str1;
            num2 = str2;
        }
        else
        {
            num1 = str2;
            num2 = str1;
            len = len1;
            len1 = len2;
            len2 = len;
        }
        up = 0;/*进位赋初值0*/
        for (p1 = num1 + len1 - 1, p2 = num2 + len2 - 1; p1 >= num1; p1--, p2--)/*从各自最小位逐位相加,以较小数的最高位为边界*/
        {
            if (p2 < num2)/*当高位无数时补0*/
                *p2 = 48;
            *p1 = *p1 + *p2 - 96 + up; /* 由ascII码值化为十进制值*/
            up = 0;
            if (*p1 >= 10) /* 如果此位相加结果十进制值大于10则作减10处理*/
            {
                *p1 -= 10;
                up = 1; /* 进位寄存器赋1*/
            }
            *p1 += 48; /* 再次化为ascII码以供输出*/
        }
        if (up == 1)/*当最高位加上进位仍产生进位则需于前再输出一个“1”*/
            printf("1");
        printf("%s\n", num1);/*输出经加法处理改动的大数组*/
        printf("\n");
    }
    system("pause");
    return 0;
}