Привет, ребята, мне нужно создать программу, в которую вы вводите число n. Не указано, насколько велика вероятность того, что это не будет.Переменная получает неправильное значение?
Выход должен быть: пример n = 123456
123456 - 12345 + 1234 - 123 + 12 - 1 = 112233
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);
}
'10^b'" 10 xor b ", а не" 10 умноженных b раз ". – MikeCAT
Поскольку 'b' is ** unsigned ** number,' b> = 0' никогда не будет ложным. – MikeCAT