gpt4 book ai didi

c - 当输入数字太大时,C 程序无法运行

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:38:12 26 4
gpt4 key购买 nike

我用 C 写了一个程序,打印代表输入数字的英文(逐位)例如,当你输入938时,它会打印出nine three 8当输入太大(超过 9 位数字)时,它不起作用。谁能向我解释为什么会这样?我已尝试使用 unsigned int 而不是 int 作为变量,但它仍然不起作用。

#include <stdio.h>
/**
10/17/2012
Programming in C
Ch6 no. 6
Program doesn't work when number gets too large (>9 digits)
Print english that represents input number (digit by digit)
*/

int main(void){

int digit;//use to hold digit

int number;//hold input number

int revNumber = 0; //the reversed digit of the input number

int no_zero = 0;//number of zero needed to be printed at the end

int i = 1;//hold how many digits does the number have (+1 = i*10)

printf("Please enter a number\n");

scanf("%u", &number);

int testing = number;//a copy of input number for

//counts how many digits does the number have (+1 = i*10)

for(; testing != 0;i *= 10){

testing /= 10;

}

//make the reversed number

do{

i /= 10;

digit = number % 10;

if(digit == 0)

no_zero++;

revNumber += (digit*i);

number /= 10;

}while(number != 0);


//print the result using the reversed number

do{

digit = revNumber % 10;

revNumber /= 10;

switch(digit)

{

case 0:

printf("zero ");

no_zero--; //minus zero not at the end

break;

case 1:

printf("one ");

break;

case 2:

printf("two ");

break;

case 3:

printf("three ");

break;

case 4:

printf("four ");

break;

case 5:

printf("five ");

break;

case 6:

printf("six ");

break;

case 7:

printf("seven ");

break;

case 8:

printf("eight ");

break;

default:

printf("nine ");

}

}while(revNumber != 0);


//add back the ending zero

for(;no_zero!=0;no_zero--)

printf("zero ");

return 0;

}

最佳答案

int 在 C 中的标准表示是有限的。基本上,您有可用的 8 * sizeof (int) 位(比方说 32)。有 32 位可用,unsigned int 可以和 2^32 - 1 一样大,即 4294967295 任何大于这个数是不行的。

您可以尝试使用 unsigned long long 但这仍然是有限的。或者,您可以尝试使用 BigNum图书馆。

但是,对于您的特定问题,将数字作为字符串读取并作用于该字符串的每个字母就足够了。

关于c - 当输入数字太大时,C 程序无法运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12928060/

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