我正在自學算術,但遇到了問題。我的目標是找到最小的數字而不是最大的數字。我很困惑。
示例輸出
Enter n: 42123647
Smallest digit = 7
程式
#include<stdio.h>
int main(){
int num1, num2, num3=0;
printf("Enter n: ");
scanf("%d", &num1);
while(num1>0){
num2 = num1 % 10;
if(num3<num2){
num3=num2;
}
num1 = num1 * 10;
}
printf("Smallest digit = %d",num3);
return 0;
}
uj5u.com熱心網友回復:
在sizeof (int)4 的系統上,陳述句
num1 = num1 * 10;
當輸入為 時,將很快(在兩次迭代內)導致有符號整數溢位42123647,原樣INT_MAX2147483647
發生這種情況時,該程式的行為未定義。
用檢索最低有效數字后% 10,嘗試將輸入除以 10。
此外,您要檢查當前數字是否小于當前最小值,并將最小值初始化為大于或等于最大可能值的值。
#include <stdio.h>
int main(void) {
int input;
int min = 10;
printf("Enter n: ");
if (1 != scanf("%d", &input)) {
fprintf(stderr, "Invalid input.\n");
return 1;
}
while (input > 0) {
int digit = input % 10;
if (digit < min)
min = digit;
input /= 10;
}
printf("Smallest digit = %d\n", min);
}
uj5u.com熱心網友回復:
如前所述,您想使用除法(而不是乘法)移動到下一位。
還使用底部測驗回圈,以便僅輸入零作為數字的情況正常作業。底部測驗的回圈保證至少一次通過回圈。
只要輸入正確的數字,以下代碼就可以作業。與 scanf 一起使用的 %d 格式說明符基本上會忽略前導零(即,如果輸入 0123,那么最小的數字將是 1 而不是 0)。
/* find a number's smallest digit
*/
#include <stdio.h>
int main (void)
{
printf("\n");
printf("enter n: ");
int number;
scanf("%d", &number);
int smallestDigit = 9;
do {
int currentDigit = number % 10;
if (currentDigit < smallestDigit) {
smallestDigit = currentDigit;
}
number /= 10;
} while (number > 0);
printf("\n");
printf("smallest digit = %d\n", smallestDigit);
return 0;
}
uj5u.com熱心網友回復:
一個基于字符陣列(字串)的解決方案,以防您的輸入太大并溢位其他答案中提到的變數。
#include <stdio.h>
#include <ctype.h>
int isNumeric(char *str);
int main(void) {
char *input;
int min = 9;
int digit;
printf("Enter n: ");
input = inputString(stdin,10); // explained later in answer
if( isNumeric(input) == 0 ) {
printf("Not a number.\n");
return 0;
}
for( int i = 0; input[i] != '\0'; i ) {
digit = input[i] - '0'; // ascii values
if (digit < min)
min = digit;
}
printf("Smallest digit = %d\n", min);
}
int isNumeric(char *str) {
if( str[0] == '\0' )
return 0;
for( int i = 0; str[i] != '\0'; i ) {
if( !isdigit(str[i]) )
return 0;
}
return 1;
}
重要的
inputString(stdin,10)是來自此堆疊溢位問題C-read-variable-length-input中存在的函式實作的函式呼叫。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/464198.html
標籤:C
下一篇:在C中釋放結構內的結構
