以是我写的代码,我的思路是将每一位都储存在一个位置,然后通过翻转字符串,再进行加减,因为最大的即使用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");
}
}