2015-10-20 46 views
0

你好,我需要做一個程序,你在其中輸入一個數字n。 沒有說明它有多大,所以沒有限制。變量獲取錯誤的值?

輸出應該是:例如n = 123456

  1. 123456 - 12345 + 1234 - 123 + 12 - 1 = 112233

  2. 1 + 12 + 123 + 1234 + 12345 + 123456 = 137171

我已經第一部分完成,第二以及但是當我打印第二個方程它打印的值不是我計算的。

下面的代碼:

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
    unsigned long int num,sum,num2=0,sum2=0,b=0,c=0,d=0,base; 
    int a=0; 
    printf("Enter an integer >=0: "); 
    scanf("%ld",&num); 
    c=num; 
    sum=num; 
    printf("%ld ",num); 
    while(num>0) 
    { 
     if(a==0) 
     { 
      num/=10; 
      sum-=num; 
      printf(" - %ld",num); 
      a=1; 
     } 
     else if (a==1) 
     { 
      num/=10; 
      sum+=num; 
      printf(" + %ld",num); 
      a=0; 
     } 
    } 
    printf("= %ld\n",sum); 
    d=c; 
    printf("d: %ld\n ",d); 
    while(d>10) 
    { 
     b++; 
     d/=10; 
     printf("%ld\n",d); 
    } 
    printf("b:%lu\n",b); 
    printf("c: %lu\n",c); 

    for(b;b>0;b--) 
    { 
     base=10^b; 
     num2=c/base; 

     if (b==1) 
     { 
      printf("%ld",num2); 
     } 
     else 
     { 
      printf("%ld + ",num2); 
     } 
     sum2+=num2; 
    } 
    printf("= %ld",sum2); 
    return 0; 
} 

我知道我有額外的價值和我打印的人是不是我所陳述的需要,我只是檢查什麼樣的價值觀是不正確的。我想我得到,因爲我怎麼打印出來,或者因爲變量類型的,我用數字5005005,num2試圖在第一時間應該是5和我得到417k十歲上下的錯誤值num2=c/base;。任何幫助表示讚賞。

編輯:我改變了功率誤差,但現在的程序崩潰。

新代碼:

#include <stdio.h> 
#include <stdlib.h> 
#include <math.h> 

int main() 
{ 
    unsigned long int num,sum,num2=0,sum2=0,b=0,c=0,d=0,base; 
    int a=0; 
    printf("Enter an integer >=0: "); 
    scanf("%ld",&num); 
    c=num; 
    sum=num; 
    printf("%ld ",num); 
    while(num>0){ 

      if(a==0){ 
      num/=10; 
      sum-=num; 
      printf(" - %ld",num); 
      a=1; 
      } else if (a==1){ 
      num/=10; 
      sum+=num; 
      printf(" + %ld",num); 
      a=0; 
      } 

    } 
    printf("= %ld\n",sum); 
    d=c; 
    printf("d: %ld\n ",d); 
    while(d>10){ 
     b++; 
     d/=10; 
     printf("%ld\n",d); 
    } 
    printf("b:%lu\n",b); 
    printf("c: %lu\n",c); 



    for(b;b>=0;b--){ 
     base= powl(10,b); 
     num2=c/base; 

     if (b==0){ 
      printf("%ld",num2); 
     }else{ 
     printf("%ld + ",num2); 
     } 
     sum2+=num2; 
     printf("%ld",sum2); 
    } 
    printf("= %ld",sum2); 
    return 0; 
} 

EDIT2:固定它,我仍然不知道爲什麼它使用> = 0

這裏的時候崩潰的修復:

for(b;b>0;b--){ 
      base= powl(10,b); 
      num2=c/base; 

      if (b==1){ 
       printf("%ld + ",num2); 
       sum2+=num2; 
       num2=c; 
       printf("%ld",num2); 
      }else{ 
      printf("%ld + ",num2); 
      } 
      sum2+=num2; 
      printf("%ld",sum2); 
     } 
+8

'10^b'是「10 x或b」,而不是「10乘以b次」。 – MikeCAT

+0

既然'b'是**無符號**號碼,'b> = 0'永遠不會是錯誤的。 – MikeCAT

回答

0
  • 您無法通過^運算符來計算功率:它是xor運算符。
  • d>10會導致錯誤的結果時,輸入的前兩位數字是10
  • Inclemented b因爲最後一個數字缺失。

固定碼:

#include <stdio.h> 
#include <stdlib.h> 

int main(void) 
{ 
    unsigned long int num,sum,num2=0,sum2=0,b=0,c=0,d=0; 
    int a=0; 
    printf("Enter an integer >=0: "); 
    scanf("%ld",&num); 
    c=num; 
    sum=num; 
    printf("%ld ",num); 
    while(num>0){ 

     if(a==0){ 
      num/=10; 
      sum-=num; 
      printf(" - %ld",num); 
      a=1; 
     } else if (a==1){ 
      num/=10; 
      sum+=num; 
      printf(" + %ld",num); 
      a=0; 
     } 

    } 
    printf("= %ld\n",sum); 
    d=c; 
    printf("d: %ld\n ",d); 
    while(d>=10){ 
     b++; 
     d/=10; 
     printf("%ld\n",d); 
    } 
    printf("b:%lu\n",b); 
    printf("c: %lu\n",c); 


    for(num2=c,b++;b>0;b--){ 

     if (b==1){ 
      printf("%ld",num2); 
     }else{ 
      printf("%ld + ",num2); 
     } 
     sum2+=num2; 
     num2/=10; 

    } 
    printf("= %ld",sum2); 
    return 0; 
} 

UPDATE:
要獲得1 + 12 + 123 + 1234 + 12345 + 123456, 可以使用base來計算數字。

#include <stdio.h> 
#include <stdlib.h> 

int main(void) 
{ 
    unsigned long int num,sum,num2=0,sum2=0,b=0,c=0,d=0,base=1; 
    int a=0; 
    printf("Enter an integer >=0: "); 
    scanf("%ld",&num); 
    c=num; 
    sum=num; 
    printf("%ld ",num); 
    while(num>0){ 

     if(a==0){ 
      num/=10; 
      sum-=num; 
      printf(" - %ld",num); 
      a=1; 
     } else if (a==1){ 
      num/=10; 
      sum+=num; 
      printf(" + %ld",num); 
      a=0; 
     } 

    } 
    printf("= %ld\n",sum); 
    d=c; 
    printf("d: %ld\n ",d); 
    while(d>=10){ 
     b++; 
     d/=10; 
     base*=10; 
     printf("%ld\n",d); 
    } 
    printf("b:%lu\n",b); 
    printf("c: %lu\n",c); 


    for(b++;b>0;b--){ 

     num2=c/base; 
     if (b==1){ 
      printf("%ld",num2); 
     }else{ 
      printf("%ld + ",num2); 
     } 
     sum2+=num2; 
     base/=10; 

    } 
    printf("= %ld",sum2); 
    return 0; 
} 
+0

雖然這仍然有幫助,那修復給我123456 + 12345 + 1234 + 123 + 12 + 1,我需要1 + 12 + 123 + 1234 + 12345 + 123456。還是謝謝。 – Drshotyou