Problem Description
给出一个正整数,将这个正整数分割成 2 个数,怎样分割才能使分成的两个数的和最大呢?请你求出最大的和。
Input
输入数据有多组(数据组数不超过 100),到 EOF 结束。
对于每组数据,输入一行,包含 1 个整数 n (10 <= n <= 10^1000)。
Output
对于每组数据,输出一行,包含 1 个整数,表示分割成的两个数的最大和。
Example Input
100 971 3369 101 829374
Example Output
10 98 372 11 82941
Hint
请注意数据范围。
#include <stdio.h>
#include <string.h>
void main()
{
char num[1123];
while (scanf("%s", num) == 1)
{
int len = strlen(num),i,j;
char a[1123], b[1123];
a[0] = b[0] = '0';
for (i = 1; i < len; i++)
a[i] = num[i];
for (i = 0; i < len - 1; i++)
b[i + 1] = num[i];
a[len] = b[len] = 0;
i = len - 1;
a[i] += num[0] - '0';
while (a[i] > '9')
{
a[i] -= 10;
a[--i]++;
}
i = len - 1;
b[i] += num[len - 1] - '0';
while (b[i] > '9')
{
b[i] -= 10;
b[--i]++;
}
i = len;
while (a[0] == '0')
{
for (j = 0; j < i; j++)
a[j] = a[j + 1];
i--;
}
i = len;
while (b[0] == '0')
{
for (j = 0; j < i; j++)
b[j] = b[j + 1];
i--;
}
int lena = strlen(a);
int lenb = strlen(b);
int f;
if (lena > lenb) f = 1;
else if (lena < lenb) f = 2;
else
{
if (strcmp(a, b) > 0) f = 1;
else f = 2;
}
if (f == 1)
printf("%s", a);
else
printf("%s", b);
printf("\n");
}
}