原题如下:
练习4.9 给一个不多于5位的正整数,求
1.它是几位数;
2.分别输出每一位数字;
3.倒序输出各位数字。
思考:1.要求输入为不多于5位的正整数
2.要取出5位中每位的数字
3.要能辨认出前几位的数字0来判断到底是几位数
在取得每位的数字然后转换成ASCII码字符时候,犯了错误。
错误代码为:
A=(char)k/10000; k=k%10000; B=(char)k/1000; k=k%1000; C=(char)k/100; k=k%100; D=(char)k/10; E=(char)k%10;
结果总是得不到正确的字符。
经过调试,发现这样得到的零位,是空字符。才惊觉用(char)强制转换,得到的是第0个字符,而不是字符‘0’。故修改代码为:
A=(char)(k/10000+48); k=k%10000; B=(char)(k/1000+48); k=k%1000; C=(char)(k/100+48); k=k%100; D=(char)(k/10+48); E=(char)(k%10+48);
整体代码附后:
/****************************************************** 练习4.9 给一个不多于5位的正整数,求 1.它是几位数; 2.分别输出每一位数字; 3.倒序输出各位数字。 CREATE---------------------------- By: Idooi Liu Time: 2015/09/18-1046 ---------------------------------- ******************************************************/ #include <stdio.h> #include <stdlib.h> int main(void) { int integer; int k; //用于取值 int grade; //表明是几位数 char A, B, C, D, E; //A=万,B=千,C=百,D=十,E=个 do{ printf("Please intput your number:\n"); scanf("%d", &integer); }while(integer>99999 || integer<=0); k=integer; A=(char)(k/10000+48); k=k%10000; B=(char)(k/1000+48); k=k%1000; C=(char)(k/100+48); k=k%100; D=(char)(k/10+48); E=(char)(k%10+48); if(A!=‘0‘) { printf("%d 是五位数\n", integer); grade=5; } else if(B!=‘0‘) { printf("%d 是四位数\n", integer); grade=4; } else if(C!=‘0‘) { printf("%d 是三位数\n", integer); grade=3; } else if(D!=‘0‘) { printf("%d 是两位数\n", integer); grade=2; } else{ printf("%d 是个位数\n", integer); grade=1; } switch(grade) { case 1: printf("%c\n", E);printf("%c\n", E);break; case 2: printf("%c%c\n", D,E);printf("%c%c\n", E,D);break; case 3: printf("%c%c%c\n", C,D,E);printf("%c%c%c\n", E,D,C);break; case 4: printf("%c%c%c%c\n", B,C,D,E);printf("%c%c%c%c\n", E,D,C,B);break; case 5: printf("%c%c%c%c%c\n", A,B,C,D,E);printf("%c%c%c%c%c\n", E,D,C,B,A); break; } return 0; }
时间: 2024-12-11 05:34:34