2015-10-20 4 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; 
} 

Я знаю, что у меня есть дополнительные ценности, и что я печатаю другие, которые не то, что я утверждаю, как нужно, я просто проверить, что значения неверны. Я думаю, что я получаю неправильные значения для num2=c/base; из-за того, как я печатаю его или из-за типа переменной, я пытаюсь с номером 5005005, num2 в первый раз должен быть 5, и я получаю 417 тыс. Иш. Любая помощь приветствуется.

Редактировать: Я изменил ошибку питания, но теперь программа сбой.

новый код:

#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 xor b ", а не" 10 умноженных b раз ". – MikeCAT

+0

Поскольку 'b' is ** unsigned ** number,' 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

Смежные вопросы