分割
Time Limit: 1000MS Memory Limit: 65536KB
Submit Statistic
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
#include <stdio.h>
#include <string.h>
int main(void)
{
char d[1123];
while (scanf("%s", d) == 1)
{
int len = strlen(d);
char a[1123], b[1123];
a[0] = b[0] = '0';
for (int i = 1; i < len; i++)
a[i] = d[i];
for (int i = 0; i < len - 1; i++)
b[i + 1] = d[i];
a[len] = b[len] = 0;
int i = len - 1;
a[i] += d[0] - '0';
while (a[i] > '9')
{
a[i] -= 10;
a[--i]++;
}
i = len - 1;
b[i] += d[len - 1] - '0';
while (b[i] > '9')
{
b[i] -= 10;
b[--i]++;
}
i = len;
while (a[0] == '0')
{
for (int j = 0; j < i; j++)
a[j] = a[j + 1];
i--;
}
i = len;
while (b[0] == '0')
{
for (int 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");
}
return 0;
}