SDUT 3769 分割 超大数据加一位数 比较大小

来源:互联网 发布:2016网络神曲排行榜 编辑:程序博客网 时间:2024/04/20 13:49

分割
Time Limit: 1000MS Memory Limit: 65536KB
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(){    char d[1111];    char a[1111], b[1111];    int i, len, j;    while(~scanf("%s", d))    {        len = strlen(d);        a[0] = b[0] = '0';//预处理,防止到时候相加的时候,进制        for(i = 0; i < len - 1; i++)        {            a[i + 1] = d[i];//前len-1个复制a        }        for(i = 1; i < len; i++)        {            b[i] = d[i];//后len-1个复制到b        }        a[len] = b[len] = '\0';//结尾        //////////前面,len-1个元素 和 第len-1的元素相加        i = len - 1;        a[i] = a[i] + d[i] - '0';        while(a[i] > '9')        {            a[i - 1] += 1;            a[i] = (a[i] - '0') % 10 + '0';            i--;        }        //////////第一个元素 和 后面len-1个元素相加        i = len - 1;        b[i] = b[i] + d[0] - '0';        while(b[i] > '9')        {            b[i - 1] += 1;            b[i] = (b[i] - '0') % 10 + '0';            i--;        }        j = len;        ////对a进行处理        while(a[0] == '0')        {            for(i = 0; i < j; i++)            a[i] = a[i+1];            j--;        }        j = len;        ////对b进行处理        while(b[0] == '0')        {            for(i = 0; i < j; i++)            b[i] = b[i + 1];            j--;        }        //比较大小        if(strlen(a) > strlen(b)) printf("%s\n", a);        else if(strlen(a) < strlen(b)) printf("%s\n", b);        else        {            if(strcmp(a, b) > 0) printf("%s\n", a);            else printf("%s\n", b);        }    }    return 0;}
0 0
原创粉丝点击