问题是编写一个程序,该程序接受来自终端的键控整数,并以英语提取并显示整数的每个数字。所以,如果用户键入932,程序应显示'九三二'..
我的算法是首先反转数字,使932变为239.现在我使用mod运算符和print提取最后一位数字。接下来我将数字除以10,然后我再次提取最后一位数字,依此类推......
是否还有其他算法(更短,更有效)?
可以提取整数的最后一位数。是否可以提取第一个数字等等?
答案 0 :(得分:5)
如果输入带有fgets
等字符串
这些行上的东西(我没有错误检查,它只是一个伪代码)
char *numArray[]={"One", "Two", ....};
fgets(buffer, 80, stdin)
while ( buffer[i] )
{
printf("%s ", numArray[buffer[i]-'0'])
i++;
}
答案 1 :(得分:0)
您应该按照注释和Pavan的建议处理字符串,但是如果给出十进制的整数,您可以通过以下方式提取nth
数字:
floor( (a % (10**n)) / (10**(n-1)) )
其中**
是指数(pow
中的<math.h>
)。如果您恰好在不同的基地b
工作,这仍然有效:
floor( (a % (b**n)) / (b**(n-1)) )
答案 2 :(得分: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;
}
答案 3 :(得分: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;
}