gpt4 book ai didi

c - 变量获取错误值?

转载 作者:行者123 更新时间:2023-11-30 17:09:33 26 4
gpt4 key购买 nike

大家好,我需要编写一个程序,在其中输入数字 n。 没有指定 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,我得到了 417k 左右。如有任何帮助,我们将不胜感激。

编辑:我更改了电源错误,但现在程序崩溃了。

新代码:

#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);
}

最佳答案

  • 您无法通过 ^ 运算符计算幂:它是异或运算符。
  • d>10 当输入的前两位是10时,会导致错误的结果。
  • 增加了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;
}

更新:
要获得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;
}

关于c - 变量获取错误值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33237843/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com