C 不';如果位数大于10,则不工作

C 不';如果位数大于10,则不工作,c,C,我想做一个程序,输入数字并打印两个数字,一个是所有的奇数,第二个是所有的偶数 如果输入的位数小于10,它就可以正常工作,但是当输入的位数大于10时,就会出错。你知道为什么吗 unsigned long int n; unsigned long int even=0,odd=0; int countOdd=1,countEven=1; printf("enter every number: \n"); scanf("%lu",&n); while(n!=0){ if(n%2==

我想做一个程序,输入数字并打印两个数字,一个是所有的奇数,第二个是所有的偶数

如果输入的位数小于10,它就可以正常工作,但是当输入的位数大于10时,就会出错。你知道为什么吗

unsigned long int n;
unsigned long int even=0,odd=0;
int countOdd=1,countEven=1;

printf("enter every number: \n");
scanf("%lu",&n);

 while(n!=0){
   if(n%2==0){
        even+=10*countEven*(n%10);
        countEven*=10;
              }
   else
       {
        odd+=10*countOdd*(n%10);
        countOdd*=10;

       }
   n=n/10;
   }
printf("the odd number is %d \n",odd/10);
printf("the even number is %d \n\n\n",even/10);

unsigned long
在您的机器上可能是32位的,它能容纳的最大值是232-1(
4294967295
),您可能输入了一个更大的数字


请尝试使用不带符号的long-long,它至少是64位。

不带符号的long
在您的计算机上可能是32位的,它可以保存的最大值是232-1(
4294967295
),您可能输入了一个更大的数字


请尝试使用
unsigned long long
,它至少是64位。

您已将
n
声明为
unsigned long int
,它在32位系统中可以保存最大值
4294967295
。因此,当您输入超过此值的值时,它将输出最大值
4294967296

 odd 99795
 even 42462

您已将
n
声明为
unsigned long int
,它可以在32位系统中保存最大值
4294967295
。因此,当您输入超过此值的值时,它将输出最大值
4294967296

 odd 99795
 even 42462

什么不起作用?出了什么问题?你输入什么?你期待什么?你有什么?您尝试过什么?您可以删除该变量并使用
偶数*=10,而不是
偶数*=10在添加数字之前。奇数也是一样。您是否使用能够存储10位或更多数字的整数数据类型?32位
长无符号
值仅从0到4294967295(如您所见,它仅在10位值的范围内)什么不起作用?出了什么问题?你输入什么?你期待什么?你有什么?您尝试过什么?您可以删除该变量并使用
偶数*=10,而不是
偶数*=10在添加数字之前。奇数也是一样。您是否使用能够存储10位或更多数字的整数数据类型?32位
长无符号
值仅从0到4294967295(正如您所看到的,它仅在10位值的范围内)或使用
\include
和使用
uint64\u t
unsigned long-long
是gcc唯一的功能)@LuisColorado事实上,
long
是C99以来的标准C类型。
stdint.h
也是。
@Luiscolora不太清楚,
long
是C99以来的标准C类型。
stdint.h
也是。好的,我会尽量记住的。谢谢你的更正。