【codevs 3054】高精度练习-文件操作

题目描述 Description
输入一组数据,将每个数据加1后输出

输入描述 Input Description
输入数据:两行,第一行为一个数n,第二行为n个数据

输出描述 Output Description
输出数据:一行,为处理过的数据
样例输入 Sample Input
5

-1 2 100 -5 14

样例输出 Sample Output
0 3 101 -4 15

数据范围及提示 Data Size & Hint
数据范围:对60%为数据,ni≤32767

对100%为数据,ni≤10255

n<=500

数据改了7次终于改对了

#include
#include
#include
using namespace std;
const int maxn=10001;
char a[maxn];
int ca[maxn],cb[maxn],cc[maxn];
int n,lena,lenc;
void jia()
{
    memset(ca,0,sizeof(ca));
    memset(cc,0,sizeof(cc));
    cin>>a;
    cb[1]=1;
    if(a[0]=='-')
    lena=strlen(a)-1;
    else lena=strlen(a);
    if(a[0]=='-')
    {
        for(int i=1;i<=lena;i++)
        ca[i]=a[lena-i+1]-'0';
    }
    else 
    {
        for(int i=1;i<=lena;i++)
        ca[i]=a[lena-i]-'0';
    }
    lenc=1;
    if(a[0]!='-')
    {
        ca[1]+=1;
        while(lenc<=lena+1)
        {
            cc[lenc]+=ca[lenc];
            cc[lenc+1]=cc[lenc]/10;
            cc[lenc]=cc[lenc]%10;
            lenc++;
        }
        while(cc[lenc]==0) 
        lenc--;
        for(int i=lenc;i>=1;i--)
        cout<cout<<' ';
    }
    else if(a[0]=='-')
    {
        if(lena==1&&a[1]=='1')
        {
            cout<<'0';
            cout<<' ';
            return;
        }
        if(ca[1]>0)
        {
            cout<<'-';
            ca[1]-=1;
            for(int i=lena;i>=1;i--)
            cout<cout<<' ';
        }
        else if(ca[1]==0)
        {
            cout<<'-';
            lenc=1;
            while(lenc<=lena+1)
            {
                if(ca[lenc]10;
                    ca[lenc+1]--;
                }
                cc[lenc]+=ca[lenc]-cb[lenc];
                lenc++;
            }
            while(cc[lenc]==0) lenc--;
            for(int i=lenc;i>=1;i--)
            cout<cout<<' ';
        }
    }
    return;
}
int main()
{
    scanf("%d",&n);
    while(n--)
    {
        memset(ca,0,sizeof(ca));
        jia();
    }
    return 0;
}

注意负号的处理

你可能感兴趣的:(===基础===,高精度)