2014-02-08 38 views
0

http://www.spoj.com/problems/JULKA/help我解决这个问题,请.explain为什么我们在终端除了在代码注释bits.as以下无法理解为什么在结尾处添加数字后加零

#include <stdio.h> 
    #include <string.h> 

    #define MAX 111 

    char klaudia[MAX], natalia[MAX], total[MAX], diff[MAX]; 

     void calc() 
     { 
      int len1 = strlen(total); 
      int len2 = strlen(diff); 
      int a, b, c, i, j, k, f; 
      char temp[MAX]; 

      for(i=len1-1, j=len2-1, k=c=0; i>=0 || j>=0 || c; i--, j--, k++) 
      { 
       a = i>=0? total[i]-'0' : 0; 
       b = j>=0? diff[j]-'0' : 0; 
       temp[k] = (a+b+c)%10 + '0'; 
       c = (a+b+c)/10; 
     } 
     temp[k] = 0;//explain 

     strcpy(klaudia,"0"); 
     //explain below for loop what is actually being done in this loop// 
     for(i=k-1, j=a=f=0; i>=0; i--) 
     { 
      b = (a*10 + temp[i]-'0')/2; 
      a = (a*10 + temp[i]-'0') % 2; 
      if(b) f = 1; 
      if(f) klaudia[j++] = b+'0'; 
     } 
     if(!j) j++; 
     klaudia[j] = 0; 

     for(i=len1-1, j=len2-1, k=c=0; i>=0; i--, j--, k++) 
     { 
      a = total[i]-'0'; 
      b = j>=0? diff[j]-'0' : 0; 
      if(a < b+c) 
      { 
       temp[k] = (10+a-b-c) + '0'; 
       c = 1; 
      } 
      else 
      { 
       temp[k] = a-b-c + '0'; 
       c = 0; 
      } 
     } 
     temp[k] = 0; 

    strcpy(natalia,"0"); 
    for(i=k-1, j=a=f=0; i>=0; i--) 
    { 
      b = (a*10 + temp[i]-'0')/2; 
      a = (a*10 + temp[i]-'0') % 2; 
      if(b) f = 1; 
      if(f) natalia[j++] = b+'0'; 
    } 
    if(!j) j++; 
    natalia[j] = 0; 
} 

    int main() 
    { 
     while(scanf("%s %s", total, diff)==2) 
      { 
      calc(); 
      printf("%s\n%s\n", klaudia, natalia); 
     } 
      return 0; 
    } 

后加零,我们为什么要加入在我们添加完所有数字之后,数组temp中的zeo

+0

由于C字符串需要以''\ 0''字符结尾,才能正确处理。 –

+0

@πάνταῥεῖ然后我需要添加斜杠\还为了终止字符串? – codingisfun

+0

不,无论是简单的'0'还是''\ 0''(注意'''!),它都是一样的。 –

回答

1

您不是使用数字进行计算,而是使用字符串进行计算。在C中,字符串由代码为零的Nul字符终止。

+0

你能解释一下在for循环中正在做什么 – codingisfun

相关问题