2014-02-08 37 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

相關問題