关于#c语言#的问题:我的思路是将每一位都储存在一个位置,然后通过翻转字符串,因为最大的即使用longlong,所以我想到用字符串输出

img

以是我写的代码,我的思路是将每一位都储存在一个位置,然后通过翻转字符串,再进行加减,因为最大的即使用long long,也无法输出,所以我想到用字符串输出,但是它显示我段错误。

谢谢来看的人!


#include 
#include 

int main() {
    int n, t, mid;
    int j;
    scanf("%d", &n);
    char a1[100];
    char a2[100];
    char s[100];
    memset(a1, '1', sizeof(a1));
    memset(a2, '1', sizeof(a2));
    memset(s, '1', sizeof(a2));
    int len1, len2, len;
    for (int i = 1; i <= n; i++) {
        len1 = 0;
        len2 = 0;
        while ((a1[len1] = getchar()) != ' ') {
            len1++;
        }

        while ((a1[len2] = getchar()) != '\n') {
            len2++;
        }


        t = len1;
        for (int k = 0; k < t; k++) {
            mid = a1[k];
            a1[k] = a1[n];
            a1[n] = mid;
            t--;
        }
        t = len2;
        for (int k = 0; k < t; k++) {
            mid = a2[k];
            a2[k] = a2[n];
            a2[n] = mid;
            t--;
        }


        if (len1 < len2) {
            for ( j = 0; j < len1; j++) {
                s[j] = a1[j] + a2[j] - '0';
            }
            if (s[j] >= 10 + '0') {
                s[j] -= 10;
                s[j + 1]++;
            }

            for ( j = len1; j < len2; j++) {
                s[j] += a2[j];
            }
            if (s[j] >= 10 + '0') {
                s[j] -= 10;
                s[j + 1]++;
            }
        }
        len = strlen(s);
        for ( j = len - 1; j >= 0; j--) {
            printf("%c", s[j]);
        }
        printf("\n");
    }
}





#include <stdio.h>
int main()
{
    int n, t, mid;
    int j;
    scanf("%d", &n);

    int len1, len2, len;
    for (int i = 1; i <= n; i++)
    {
        char a1[100] = {0};
        char a2[100] = {0};
        char s[100] = {0};
        // memset(a1, '1', sizeof(a1));
        // memset(a2, '1', sizeof(a2));
        // memset(s, '1', sizeof(a2));

        scanf("%s%s", a1, a2);
        len1 = strlen(a1);
        len2 = strlen(a2);
        // while ((a1[len1] = getchar()) != ' ')
        // {
        //     len1++;
        // }

        // while ((a1[len2] = getchar()) != '\n')
        // {
        //     len2++;
        // }

        t = len1 - 1; //
        for (int k = 0; k < t; k++)
        {
            mid = a1[k];
            a1[k] = a1[t]; // a1[k] = a1[n];
            a1[t] = mid;   // a1[n] = mid;
            t--;
        }
        t = len2 - 1; //
        for (int k = 0; k < t; k++)
        {
            mid = a2[k];
            a2[k] = a2[t]; //
            a2[t] = mid;   //
            t--;
        }

        // if (len1 < len2)
        // {

        len = (len1 > len2) ? len1 : len2;
        for (j = 0; j < len; j++) //
        {
            if (a1[j] == 0) a1[j] += '0';//短的空白处填补0
            if (a2[j] == 0) a2[j] += '0';//
            s[j] += a1[j] + a2[j] - '0'; //

            if (s[j] > '9')//
            {
                s[j] -= 10;
                s[j + 1]++;
            }
        }
        if (s[len] > 0)//最高位有进位
            s[j] += '0';

        //}
        len = strlen(s);
        for (j = len - 1; j >= 0; j--)
        {
            printf("%c", s[j]);
        }
        printf("\n");
    }
}