0

問題は、端末からキー入力された整数を取得し、整数の各桁を英語で抽出して表示するプログラムを作成することです。そのため、ユーザーが 932 と入力すると、プログラムは「nine three two」と表示する必要があります。

私のアルゴリズムは、932 が 239 になるように、最初に数値を逆にすることです。次に、mod 演算子を使用して最後の桁を抽出し、出力します。次に、数値を 10 で割り、最後の桁をもう一度抽出します...

他のアルゴリズム (より短く効率的な) はありますか?

整数の最後の桁を抽出することができます。最初の桁などを抽出することはできますか?

4

4 に答える 4

5

fgetsetcで文字列を入力すれば全てのmod処理・反転を飛ばすことができます

これらの行に何か(私の側ではエラーチェックはありません、それは単なる疑似コードです)

char *numArray[]={"One", "Two", ....};

fgets(buffer, 80, stdin)

while ( buffer[i] )
{
    printf("%s ", numArray[buffer[i]-'0'])
    i++;
}
于 2012-04-10T13:08:36.367 に答える
0
#include <stdio.h>

void print(int n){
    static char *digit_name[] = {"zero","one","two","three","four","five","six","seven","eight","nine" };
    int q = n / 10;
    int r = n % 10;
    if(q != 0){
        print(q);
        putchar(' ');
    }
    printf("%s",digit_name[r]);
}

int main(void){
    print(932);
    return 0;
}
于 2012-04-10T16:00:42.537 に答える
0

だから、投稿を読んだ後、私は以下のように書いたでしょう:

#include <stdio.h>
#include <string.h>

char bar(char foo) {
    char *bar[] = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
    return foo <= '9' && foo >= '0'? printf("%s", bar[foo - '0']) : 0;
}

int main (int argc, char const *argv[]) {
    char buf[128];
    int len;

    printf("Give input: ");
    fgets(buf, 128, stdin);

    for(len = 0; buf[len]; len++) {
        if(bar(buf[len]))
            printf("\n");
    }
    return 0;
}
于 2012-04-10T14:41:36.630 に答える
0

コメントと Pavan で提案されているように、実際には文字列を処理する必要がありますが、基数 10 の整数を指定すると、次の方法でnth数字を抽出できます。

floor( (a % (10**n)) / (10**(n-1)) )

**指数はどこにありますか( powC <math.h>)。別の base で作業している場合bでも、これは引き続き機能します。

floor( (a % (b**n)) / (b**(n-1)) )
于 2012-04-10T13:45:03.417 に答える