大数相加减

void Add(char fx[],int y)
{
    char fy[100];
    itoa(y,fy,10);
    int xlen = strlen(fx);
    int ylen = strlen(fy);
    int i,j,up=0,h=0,k;
    if(xlen>=ylen)
    {
        for(i=ylen-1,j=xlen-1;j>=0;i--,j--)
        {
            if(i>=0)
            {
                k = (fx[j] - '0') + (fy[i] - '0') + up;
                if(k>=10)
                {
                    k = k - 10;
                    s[h] = k+'0';
                    h++;
                    up = 1;
                }
                else
                {
                    s[h] = k + '0';
                    h++;
                    up = 0;
                }
            }
            else
            {
                k = (fx[j] - '0') + up;
                if(k>=10)
                {
                    k = k -10;
                    s[h] = k+'0';
                    h++;
                    up = 1;
                }
                else
                {
                    s[h] = k + '0';
                    h++;
                    up = 0;
                }
            }
        }
        if(up==1)
        {
            s[h] = '1';
            h++;
        }
    }
    else
    {
        for(i=xlen-1,j=ylen-1;j>=0;i--,j--)
        {
            if(i>=0)
            {
                k = (fx[i] - '0') + (fy[j] - '0') + up;
                if(k>=10)
                {
                    k = k - 10;
                    s[h] = k+'0';
                    h++;
                    up = 1;
                }
                else
                {
                    s[h] = k + '0';
                    h++;
                    up = 0;
                }
            }
            else
            {
                k = (fy[j] - '0') + up;
                if(k>=10)
                {
                    k = k - 10;
                    s[h] = k+'0';
                    h++;
                    up = 1;
                }
                else
                {
                    s[h] = k + '0';
                    h++;
                    up = 0;
                }
            }
        }
        if(up==1)
        {
            s[h] = '1';
            h++;
        }
    }
    for(i=h-1,j=0;i>=0;i--,j++)
    {
        S[j] = s[i];
    }
}
# include<stdio.h>
# include<stdlib.h>
# include<string.h>
char s[100];
char S[100];   
void Add(char fx[],int y)
{
    char fy[100];
    itoa(y,fy,10);
    int xlen = strlen(fx);
    int ylen = strlen(fy);
    int i,j,up=0,h=0,k;
    for(i=0;i<100;i++)
    {
          S[i] = '';
    }
    if(xlen>=ylen)
    {
        for(i=ylen-1,j=xlen-1;j>=0;i--,j--)
        {
            if(i>=0)
            {
                k = (fx[j] - '0') + (fy[i] - '0') + up;
                if(k>=10)
                {
                    k = k - 10;
                    s[h] = k+'0';
                    h++;
                    up = 1;
                }
                else
                {
                    s[h] = k + '0';
                    h++;
                    up = 0;
                }
            }
            else
            {
                k = (fx[j] - '0') + up;
                if(k>=10)
                {
                    k = k -10;
                    s[h] = k+'0';
                    h++;
                    up = 1;
                }
                else
                {
                    s[h] = k + '0';
                    h++;
                    up = 0;
                }
            }
        }
        if(up==1)
        {
            s[h] = '1';
            h++;
        }
    }
    else
    {
        for(i=xlen-1,j=ylen-1;j>=0;i--,j--)
        {
            if(i>=0)
            {
                k = (fx[i] - '0') + (fy[j] - '0') + up;
                if(k>=10)
                {
                    k = k - 10;
                    s[h] = k+'0';
                    h++;
                    up = 1;
                }
                else
                {
                    s[h] = k + '0';
                    h++;
                    up = 0;
                }
            }
            else
            {
                k = (fy[j] - '0') + up;
                if(k>=10)
                {
                    k = k - 10;
                    s[h] = k+'0';
                    h++;
                    up = 1;
                }
                else
                {
                    s[h] = k + '0';
                    h++;
                    up = 0;
                }
            }
        }
        if(up==1)
        {
            s[h] = '1';
            h++;
        }
    }
    for(i=h-1,j=0;i>=0;i--,j++)
    {
        S[j] = s[i];
    }
}
void Jian(char fx[],char fy[])
{
    int xlen = strlen(fx);
    int ylen = strlen(fy);
    int i,j,up=0,h=0,k;
    for(i=0;i<100;i++)
    {
        S[i]='';
    }
    for(i=ylen-1,j=xlen-1;j>=0;i--,j--)
        {
            if(i>=0)
            {
                k = (fx[j] - '0') - (fy[i] - '0') - up;
                if(k>=0)
                {
                   up = 0;
                   s[h] = k + '0';
                   h++;
             }
             else
             {
                 k = k + 10;
                 up = 1;
                   s[h] = k + '0';
                   h++;
             }
            }
            else
            {
                k = (fx[j] - '0') - up;
                if(k>=0)
                {
                   up = 0;
                   s[h] = k + '0';
                   h++;
             }
             else
             {
                 k = k + 10;
                 up = 1;
                   s[h] = k + '0';
                   h++;
             }
             
            }
        }
     for(i=h-1;i>=0;i--)
     {
        if(s[i]!='0')
        {
               break;
        }  
     }
     if(i == -1)
     {
         strcpy(S,"0");
    }
     else
     {
         for(i,j=0;i>=0;i--,j++)
         {
             S[j]=s[i];
          }
    }
}
int main()      
{      
     int n,i,j,row,col;      
     int a[500][500];      
     scanf("%d",&n);      
     for(i=0;i<n;i++)      
     {      
        for(j=0;j<n;j++)      
        {      
            scanf("%d",&a[i][j]);      
            if(a[i][j]==0)      
            {      
                row = i;      
                col = j;      
            }      
          }      
    }      
    int h=0;      
    char x[1010][15],z[2][50];      
    strcpy(z[0],"0");
    strcpy(z[1],"0");
    for(i=0;i<1000;i++)      
    {      
        strcpy(x[i],"0");     
    }      
    for(i=0;i<n;i++)      
    {      
        if(i!=row)      
        {      
            for(j=0;j<n;j++)      
            {      
                Add(x[h],a[i][j]);
             strcpy(x[h],S);    
            }      
            h++;      
        }      
    }      
    for(i=0;i<n;i++)      
    {      
        if(i!=col)      
        {      
            for(j=0;j<n;j++)      
            {      
                Add(x[h],a[j][i]);
             strcpy(x[h],S);        
            }      
            h++;      
        }      
    }      
     char key[100];
    strcpy(key,x[0]);      
     int flag = 0;      
     for(i=1;i<h;i++)      
     {      
        if(strcmp(key,x[i])!=0)      
        {      
            printf("-1");      
            flag = 1;      
            break;      
        }      
    }      
    char sum1[100],sum2[100];      
    if(flag==0)      
    {      
        for(i=0;i<n;i++)      
        {      
            if(i!=row)      
            {      
                Add(sum1,a[i][col]);
             strcpy(sum1,S);           
            }      
        }         
        for(i=0;i<n;i++)      
        {      
            if(i!=col)      
            {      
                Add(sum2,a[row][j]);
             strcpy(sum2,S);      
            }      
        }      
        if(strcmp(key,x[i])==0)      
        {      
            flag = 2;      
        }      
        else      
        {      
            printf("-1");      
        }      
    }      
    if(flag==2)      
    {      
        Jian(key,sum1);  
        a[row][col] = atoi(S);
        for(i=0;i<n;i++)      
        {   
           Add(z[0],a[i][i]);
          strcpy(z[0],S); 
           Add(z[1],a[i][n-i-1]);
          strcpy(z[1],S);                
        }      
        if(strcmp(key,z[0])==0 && strcmp(key,z[1])==0)      
        {      
            printf("%d",a[row][col]);      
        }      
        else      
        {      
            printf("-1");      
        }      
    }      
    return 0;    
}  
原文地址:https://www.cnblogs.com/wshyj/p/6443369.html