#include <stdio.h>
void smith(int n) {
int num, sd = 0, sf = 0, i, t, c, j;
num = n;
while (num > 0) {
sd = sd (num % 10); // Sum of digits of input number
num = num / 10;
}
num = n;
while (num > 1) // To calculate factors of the number
{
for (i = 1; i <= num; i ) {
if (num % i == 0) break;
}
c = 0;
t = i;
for (j = 1; j <= i; j ) // To check if the numbers are prime
{
if (i % j == 0) c ;
}
if (c == 2) {
while (i > 0) {
sf = sf (i % 10);
i = i / 10;
}
}
num = num / t;
}
if (sd == sf) {
printf("Smith Number");
} else
printf("Not a Smith Number");
}
int main() {
int n;
printf("Enter a number");
scanf("%d", &n);
smith(n);
}
我期待程式能夠識別輸入數字是否是史密斯數字。
每次我嘗試運行代碼時,它都不會給出輸出。它只需要一個輸入,然后可能會進入無限回圈。為什么?
uj5u.com熱心網友回復:
這聽起來像是一個家庭作業,所以我只是給你一個提示。
num % 1任何積極的價值是什么num?
uj5u.com熱心網友回復:
問題是您正在引入一個無限回圈(一個非常難以捉摸的回圈)。看看這些代碼行:
for (i = 1; i <= num; i ) {
if (num % i == 0) break;
}
您正在測驗 是否num可以被 1 整除(對于每個數字都是如此),所以它總是會中斷,并且i會是 1。
稍后,你除以num這個數字直到num小于或等于一,但除以一產生相同的數字,所以回圈永遠不會結束。如果回圈永遠不會結束,那么您的程式將停止,因此程式永遠不會列印結果。
解決方案很簡單:從 2 而不是 1 開始分解回圈。像這樣:
for (i = 2; i <= num; i ) {
if (num % i == 0) break;
}
1 是每個數字的一??個因數,所以它不是一個有用的因數。
uj5u.com熱心網友回復:
因為 t 的值始終為 1,所以 num 始終保持不變,而 while 無限回圈。你可以像這樣修復它:
for (i = 2; i <= num; i ) {
if (num % i == 0) break;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/522230.html
標籤:C
上一篇:放置多個條件后未填充列
