まず、私の英語には申し訳ありません。私のコードの出力が、それが何であるかのアイデアを得るのに役立つことを願っています。問題は、私が作った方法で、最大999(3桁の数字)までしか動かないということです。どのくらいの数字があるのかを気にしないでループするべきだと思っています。Cプログラムでは、成長する数字を見つけることができます。
int main(){
int n, m, k, digit1, digit2, digit3, p, a = 0;
do{
printf("Enter m and n (m < n):\n"); scanf("%d %d", &m, &n);
if (m < n) {
break;
}
else printf("\Error - m > n! Try again.\n\n");
} while (a == 0);
printf("Output:\n");
for (k = m; k <= n; k++){
p = k;
do{
digit3 = p % 10; //123 % 10 = 3 13%10 = 3 == p/10 +1
digit1 = p/100; //123/100 = 1
digit2 = (p/10) % 10; // (123 /10) = 12%10 = 2
if (p > 100){
if (digit2 == digit1 + 1 && digit3 == digit2 + 1){
printf("%d ", k);
} break;
}
if (digit3 == ((p/10) + 1)) {
printf("%d ", k);
} break;
p = p/10;
} while (p > 0);
}
getch();
return 0;
}
出力例:
Enter m and n (m < n):
1 999
Output:
1 12 23 34 45 56 67 78 89 123 234 345 456 567 678 789
この出力は正しいです、それはプログラムが何をしているものです。残念ながら、999以上で動作するようにループを作ることはできません。ユーザーが入力した間隔で、各桁が1より大きいすべての数値を出力する必要があります。
あなたのアプローチは、あなたの代わりに配列の個々の変数を使用しているため、拡張できません。配列はここで説明されています:https://en.wikibooks.org/wiki/C_Programming/Arrays_and_strings –
"私のコードの出力があなたの考えを得るのに役立つことを願っています。"いいえ、それはありません。私はあなたの問題を推測したくありません。有効な番号は何ですか?なぜ1は大丈夫、2,3はないのですか?質問を編集して問題をはっきりと明記してください。 –
有効な数字は12 23のように昇順の数字です。 123など –