求一个程序,输入一个整数,依次输出它的每位数的英文单词

NewConn 2015-11-12 08:33:01
加精
#include<stdio.h>
#include<math.h>
void main()
{
int n, k, i, n1;
scanf_s("%d", &n);
n1 = n;
for (i = 1; n1 > 0; ++i)
n1 = n1 / 10;
for (; n>0 && i>=0; --i)
{
k = n / pow(10,(i-1));
switch (k)
{
case 0:printf(" zone"); break;
case 1:printf(" one"); break;
case 2:printf(" two"); break;
case 3:printf(" three"); break;
case 4:printf(" four"); break;
case 5:printf(" five"); break;
case 6:printf(" six"); break;
case 7:printf(" seven"); break;
case 8:printf(" eight"); break;
case 9:printf(" nine"); break;
}
n = n % (10 ^ (i - 1));
}
printf("\n");
}
//这是我的代码,为什么不对啊
...全文
11185 43 打赏 收藏 转发到动态 举报
写回复
用AI写文章
43 条回复
切换为时间正序
请发表友善的回复…
发表回复
April_0401 2018-07-11
  • 打赏
  • 举报
回复
你可以把他%10求余,算出的数存到数组里面(存的时候从后往前存),用一个for循环加指针进行switch判断输出对应的英文字母。
赵4老师 2017-09-05
  • 打赏
  • 举报
回复
无profiler不要谈效率!!尤其在这个云计算、虚拟机、模拟器、CUDA、多核 、多级cache、指令流水线、多种存储介质、……满天飞的时代!
  • 打赏
  • 举报
回复
引用 6 楼 zhao4zhong1 的回复:
小心驶得万年船!
//输入一个非负整数,依次输出它的每位数对应的的英文单词
#include <stdio.h>
#include <string.h>
#include <locale.h>
char s[20];
char t[20];
int i;
char c;
char *en[10]={"zero","one","two","three","four","five","six","seven","eight","nine"};
int main() {
    setlocale(LC_ALL,"chs");
    while (1) {
        printf("输入一个非负整数:");fflush(stdout);
        rewind(stdin);
        fgets(s,80,stdin);
        if (strlen(s)>10) {
            printf("输入太长(>9)!\n");
            continue;
        }
        if (2==sscanf(s,"%d%c",&i,&c)) {
            if ('\n'==c && i>=0) {
                sprintf(t,"%d\n",i);
                if (0==strcmp(s,t)) {
                    printf("%s",en[t[0]-'0']);
                    for (i=1;t[i]!='\n';i++) printf(" %s",en[t[i]-'0']);
                    printf("\n");
                    break;
                }
            }
        }
        if ('\n'==s[strlen(s)-1]) s[strlen(s)-1]=0;
        printf("\"%s\" 不是非负正整数!\n",s);
    }
    return 0;
}
//输入一个非负整数:abc
//"abc" 不是非负正整数!
//输入一个非负整数:哈
//"哈" 不是非负正整数!
//输入一个非负整数:10a
//"10a" 不是非负正整数!
//输入一个非负整数:-1
//"-1" 不是非负正整数!
//输入一个非负整数:001
//"001" 不是非负正整数!
//输入一个非负整数:1234567890
//输入太长(>9)!
//输入一个非负整数:123456789
//one two three four five six seven eight nine
//
效率太低
zhagoodwell 2017-09-03
  • 打赏
  • 举报
回复
我的代码健壮性应该更好---
# include <stdio.h>  
# define N 30 //如果要录入X个字节则 N=X    
int Getchar(char A[],int min,int max);//直到用户输入的字符串长度在[min,max]之间时 函数结束 返回字符串A的长度    
int Check(char A[]);  
int main(){    
    char A[N+1],B[][6]={"zero","one","two","three","four","five","six","seven","eight","nine"};
	int L,i; 
	while(1)
	{
    do{
    printf("输入数字(1--%d)位:\n",N);
    L=Getchar(A,1,N);
    }while(Check(A));
    i=0;
    while(i<L)
      printf("%s ",B[A[i++]]);
    printf("\n");
    }
    return 0;    
}    
int Check(char A[]){
	int i=-1;
	while(A[++i])
	  if(A[i]>'9'||A[i]<'0')
	    return printf("输入有误!请重新");
	    else A[i]-='0';
	return 0;
}
int Getchar(char *A,int min,int max)//长度在[min,max]  <闭区间>  之间时 函数结束 返回字符串A的长度        
{        
    int B,C;      
 do{        
        A[max]=B=C=0;    
        while((A[B++]=getchar())!='\n'&&B<max);    
        if(A[B-1]!='\n')while(getchar()!='\n'&&++C);        
        else A[--B]=0;     
    if(C||B&&B<min)    
       printf("您录入的字符串长度:%d字节\n只录入(%d--%d)个字节!\n",B+C,min,max);        
    }while(C||B<min);        
    return B;      
}   
Bob_Wikkings 2017-08-27
  • 打赏
  • 举报
回复
你用二维数组不是更简单
  • 打赏
  • 举报
回复
我是来学习学习的
赵4老师 2017-02-18
  • 打赏
  • 举报
回复
“多一少一”问题占程序员常犯错误的10%以上! 避免“多一少一”问题的方法之一是将比如<10甚至<5的数代入程序片断,掰手指头心算验证一下程序到底应该写为 x、x-1、x+1中的哪个? <、<=、==、>、>=中的哪个?
ebailixi 2017-02-17
  • 打赏
  • 举报
回复
#include <stdio.h> #include <stdlib.h> int main() { char *p[10]={"zero","one","two","three","four","five","six","seven","eight","nine","ten"}; long n,m; int i,j; scanf("%ld",&n); for(j=0;n>=0;j++) { m=n; for(i=0;m>=10;i++) { m=m/10; } if(n>=10) { n=n-m*(pow(10,i)); printf("%s\n",p[m]); if(n<pow(10,i-1)&&n>0) { printf("%s\n",p[0]); } } if(n<10&&n>=0) { printf("%s\n",p[n]); break; } } system("pause"); return 0; } 请帮帮忙,看看错在那里,新手刚学1周。谢谢
赵4老师 2017-01-19
  • 打赏
  • 举报
回复
在现实世界中,除时间和空间可能是无限的以外,其它任何事物都是有限的。
阿兵云原生 2017-01-18
  • 打赏
  • 举报
回复
你的输入函数你写成了 scanf_s(); 正确的输入函数应该是 scanf("%d",&n);

ITtemper 2016-11-14
  • 打赏
  • 举报
回复
赵4老师 2015-12-21
  • 打赏
  • 举报
回复
//输入一个非负整数,依次输出它的每位数对应的的英文单词
#include <stdio.h>
#include <string.h>
#include <locale.h>
char s[20];
char t[20];
int i;
char c;
char *en[10]={"zero","one","two","three","four","five","six","seven","eight","nine"};
int main() {
    setlocale(LC_ALL,"chs");
    while (1) {
        printf("输入一个非负整数:");fflush(stdout);
        rewind(stdin);
        fgets(s,20,stdin);
        if (strlen(s)>10) {
            printf("输入太长(>9)!\n");
            continue;
        }
        if (2==sscanf(s,"%d%c",&i,&c)) {
            if ('\n'==c && i>=0) {
                sprintf(t,"%d\n",i);
                if (0==strcmp(s,t)) {
                    printf("%s",en[t[0]-'0']);
                    for (i=1;t[i]!='\n';i++) printf(" %s",en[t[i]-'0']);
                    printf("\n");
                    break;
                }
            }
        }
        if ('\n'==s[strlen(s)-1]) s[strlen(s)-1]=0;
        printf("\"%s\" 不是非负整数!\n",s);
    }
    return 0;
}
//输入一个非负整数:abc
//"abc" 不是非负整数!
//输入一个非负整数:哈
//"哈" 不是非负整数!
//输入一个非负整数:10a
//"10a" 不是非负整数!
//输入一个非负整数:-1
//"-1" 不是非负整数!
//输入一个非负整数:001
//"001" 不是非负整数!
//输入一个非负整数:1234567890
//输入太长(>9)!
//输入一个非负整数:123456789
//one two three four five six seven eight nine
//
mewiteor 2015-12-21
  • 打赏
  • 举报
回复
引用 32 楼 zhao4zhong1 的回复:
//...
echo 01|这个程序.exe
cyh215 2015-12-19
  • 打赏
  • 举报
回复
不错。。。。
paschen 2015-12-19
  • 打赏
  • 举报
回复
引用 24 楼 zhao4zhong1 的回复:
[quote=引用 23 楼 paschen 的回复:] [quote=引用 6 楼 zhao4zhong1 的回复:] 小心驶得万年船!
//输入一个非负整数,依次输出它的每位数对应的的英文单词
#include <stdio.h>
#include <string.h>
#include <locale.h>
char s[20];
char t[20];
int i;
char c;
char *en[10]={"zero","one","two","three","four","five","six","seven","eight","nine"};
int main() {
    setlocale(LC_ALL,"chs");
    while (1) {
        printf("输入一个非负整数:");fflush(stdout);
        rewind(stdin);
        fgets(s,80,stdin);
        if (strlen(s)>10) {
            printf("输入太长(>9)!\n");
            continue;
        }
        if (2==sscanf(s,"%d%c",&i,&c)) {
            if ('\n'==c && i>=0) {
                sprintf(t,"%d\n",i);
                if (0==strcmp(s,t)) {
                    printf("%s",en[t[0]-'0']);
                    for (i=1;t[i]!='\n';i++) printf(" %s",en[t[i]-'0']);
                    printf("\n");
                    break;
                }
            }
        }
        if ('\n'==s[strlen(s)-1]) s[strlen(s)-1]=0;
        printf("\"%s\" 不是非负正整数!\n",s);
    }
    return 0;
}
//输入一个非负整数:abc
//"abc" 不是非负正整数!
//输入一个非负整数:哈
//"哈" 不是非负正整数!
//输入一个非负整数:10a
//"10a" 不是非负正整数!
//输入一个非负整数:-1
//"-1" 不是非负正整数!
//输入一个非负整数:001
//"001" 不是非负正整数!
//输入一个非负整数:1234567890
//输入太长(>9)!
//输入一个非负整数:123456789
//one two three four five six seven eight nine
//
非常严谨,不过如果输入的字符太长不是会溢出s吗[/quote] 不要迷信书、考题、老师、回帖; 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实! 有人说一套做一套,你相信他说的还是相信他做的? 其实严格来说这个世界上古往今来所有人都是说一套做一套,不是吗? 不要写连自己也预测不了结果的代码! [/quote] 赵老师又忽悠我了
  • 打赏
  • 举报
回复
经典!
赵4老师 2015-12-18
  • 打赏
  • 举报
回复
引用 25 楼 mewiteor 的回复:
[quote=引用 6 楼 zhao4zhong1 的回复:] 小心驶得万年船!
//...
char s[20];
//...
    setlocale(LC_ALL,"chs");
//...
        fgets(s,80,stdin);
//...
1:前面s[20],后面就fgets(s,80,stdin); 2:chs好像只在windows下有效吧,linux下好像没什么用吧。 3:最后没有清输入流,如果输入超过80字符,超过的部分会用于下一次输入。[/quote] 谢谢斧正!应该统一用20
mewiteor 2015-12-18
  • 打赏
  • 举报
回复
引用 6 楼 zhao4zhong1 的回复:
小心驶得万年船!
//...
char s[20];
//...
    setlocale(LC_ALL,"chs");
//...
        fgets(s,80,stdin);
//...
1:前面s[20],后面就fgets(s,80,stdin); 2:chs好像只在windows下有效吧,linux下好像没什么用吧。 3:最后没有清输入流,如果输入超过80字符,超过的部分会用于下一次输入。
赵4老师 2015-12-18
  • 打赏
  • 举报
回复
引用 23 楼 paschen 的回复:
[quote=引用 6 楼 zhao4zhong1 的回复:] 小心驶得万年船!
//输入一个非负整数,依次输出它的每位数对应的的英文单词
#include <stdio.h>
#include <string.h>
#include <locale.h>
char s[20];
char t[20];
int i;
char c;
char *en[10]={"zero","one","two","three","four","five","six","seven","eight","nine"};
int main() {
    setlocale(LC_ALL,"chs");
    while (1) {
        printf("输入一个非负整数:");fflush(stdout);
        rewind(stdin);
        fgets(s,80,stdin);
        if (strlen(s)>10) {
            printf("输入太长(>9)!\n");
            continue;
        }
        if (2==sscanf(s,"%d%c",&i,&c)) {
            if ('\n'==c && i>=0) {
                sprintf(t,"%d\n",i);
                if (0==strcmp(s,t)) {
                    printf("%s",en[t[0]-'0']);
                    for (i=1;t[i]!='\n';i++) printf(" %s",en[t[i]-'0']);
                    printf("\n");
                    break;
                }
            }
        }
        if ('\n'==s[strlen(s)-1]) s[strlen(s)-1]=0;
        printf("\"%s\" 不是非负正整数!\n",s);
    }
    return 0;
}
//输入一个非负整数:abc
//"abc" 不是非负正整数!
//输入一个非负整数:哈
//"哈" 不是非负正整数!
//输入一个非负整数:10a
//"10a" 不是非负正整数!
//输入一个非负整数:-1
//"-1" 不是非负正整数!
//输入一个非负整数:001
//"001" 不是非负正整数!
//输入一个非负整数:1234567890
//输入太长(>9)!
//输入一个非负整数:123456789
//one two three four five six seven eight nine
//
非常严谨,不过如果输入的字符太长不是会溢出s吗[/quote] 不要迷信书、考题、老师、回帖; 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实! 有人说一套做一套,你相信他说的还是相信他做的? 其实严格来说这个世界上古往今来所有人都是说一套做一套,不是吗? 不要写连自己也预测不了结果的代码!
加载更多回复(23)
5.1试编写一个汇编语言程序,要对键盘输入的小写字母用大写字母显示出来。 5.2 编写程序,从键盘接收一个小写字母,然后找出它的前导字符和后续字符,再按顺序输出 5.3 将AX寄存器中的16位分成4组,每组4位,然后把这四组分别放在AL、BL、CL、DL中。 5.4 试编写一程序,要比较两个字符串STRING1和STRING2所含字符是否相同,若相同则显示‘MATCH’,若不相同则显示‘NOT MATCH’。 5.5 试编写一程序,要能从键盘接收一个个位N,然后响铃N次。 5.6 编写程序,将一个包含有20个据的组M分成两个组:正组P和负组N,并分别把这两个组中的据的个显示出来。 5.7 试编制一个汇编语言程序出首地址为DATA的100D字组中的最小偶,并把它放在AX中。 5.8 把AX中存放的16位二进制K看作是8个二进制的“四分之一字节”。试编写一个程序,要一下值为3(即11B)的四分之一字节,并将该在终端上显示出来。 5.9 试编写一汇编语言程序,要从键盘接收一个四位的十六进制,并在终端上显示与它等值的二进制。 5.10 设有一段英文,其字符变量名为ENG,并以$字符结束。试编写一程序,查对单词SUN在该文中的出现次,并以格式”SUNXXXX“显示出次。 5.11 从键盘输入一系列以$为结束的字符串,然后对其中的非字字符进行计,并显示出计结果。 5.12 有一个首地址为MEM的100D字组,试编制程序删除组中所有为零的项,并将后续项向前压缩,最后将组的剩余部分补上零。 5.13 在STRING到STRING+99单元中存放着一个字符串,试编制一程序测试该字符串中是否存在字,如有,则把CL的第五位置1,否则置0. 5.14 在首地址为TABLE的组中按递增次序存放着100H个16位补码,试编写一个程序把出现次最多的及其出现的次分别放在AX和CX中。 5.15 据段中已定义了一个有N个字据的组M,试编写一程序出M中绝对值最大的,把它放在据段的M+2n单元中,并将该的偏移地址存放在M+2(n+1)单元中。 5.16 在首地址为DATA的字组中,存放了100H个16位补码,试编写一个程序出它们的平均值放在AX寄存器中;并组中有多少个小于此平均值,将结果放在BX寄存器中。 5.17 试编写一个程序,把AX中的十六进制转换为ASCII码,并将对应的ASCII码依次存放到MEM组中的四个字节中,例如:当(AX)=2A49H时,程序执行完后,MEM中的4个字节的内容为39H,34H,41H和32H。 5.18 把0~100D之间的30个存入以GRADE为首地址的30个字组中,GRADE+i表示学号i+1的学生的成绩。另一个组RANK为30个学生的名次表,其中RANK+i的内容是学号为i+1的学生的名次。编写一程序,根据GRADE中的学生成绩,将学生名次填入RANK组中。 5.19 已知组A包含15个互不相等的,试编写一程序,把既在A中又在B中出现的存在于组中C中。 5.20 设在A,B和C单元中存放着三个,若三个都不是0,则出三树之和并存放于D单元中;其中有一个为0,则把其他两个也清零。试编写此程序

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧