大数相加减
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] = '\0'; } 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]='\0'; } 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; }