C程序设计 (第四版) 谭浩强 习题4.9
习题 4.9 给一个不多于5位的正整数,要求:
1. 求出它是几位数;
2. 分别输出每一位数字;
3. 按逆序输出各位数字,例如原数为321,应输出123。
IDE工具:VS2010
Note: 使用不同的IDE工具可能有部分差异。
代码块
方法1:使用循环结构
#include <>
#include <>
int main(){
int number;
printf("Enter number: ");
scanf_s("%d", &number);
while(number <= 0 || number > 9999){
if(number <= 0){
printf("The number is not positive integer! Retry!\nEnter number: ");
}
if(number > 9999){
printf("The number is more than 5 digits! Retry!\nEnter number: ");
}
scanf_s("%d", &number);
}
//求几位数
int temp1 = number;
int count = 0;
while(temp1 != 0){
temp1 /= 10;
count++;
}
printf("The number is %d digits!\n", count);
//输出每位数字
int base = 10;
int temp2 = number;
for(int i = 1; i < count - 1; i++){
base *= 10;
}
int divideNum = base;
while(count != 0){
printf("%d ", temp2 / divideNum);
temp2 -= temp2 / divideNum * divideNum;
divideNum /= 10;
count--;
}
printf("\n");
//逆序输出
int temp3 = number;
while(temp3 != 0){
printf("%d ", temp3 % 10);
temp3 = (temp3 - temp3 % 10) / 10;
}
printf("\n");
system("pause");
return 0;
}
方法2:使用函数指针、函数的模块化设计
#include <>
#include <>
//输入数字
void inputNumber(int *number){
printf("Enter number: ");
scanf_s("%d", number);
//判断输入数字是否符合正整数,并且是不多于5位
while(*number <= 0 || *number > 9999){
if(*number <= 0){
printf("The number is not positive integer! Retry!\nEnter number: ");
}
if(*number > 9999){
printf("The number is more than 5 digits! Retry!\nEnter number: ");
}
scanf_s("%d", number);
}
}
//输出数字位数
void outputDigit(int *number, int *digit){
int i;
int temp = *number;
for(i = 0; temp != 0; i++){
temp /= 10;
}
*digit = i;
printf("The number is %d digits!\n", i);
}
//正序输出数字
void outputNumber(int *number, int *digit){
int base = 10;
int temp = *number;
for(int i = 1; i < *digit - 1; i++){
base *= 10;
}
for(int i = 0; i < *digit; i++){
printf("%d ", temp / base);
temp -= temp / base * base;
base /= 10;
}
printf("\n");
}
//逆序输出数字
void outputReverseNumber(int *number, int *digit){
int temp = *number;
for(int i = 0; i < *digit; i++){
printf("%d ", temp % 10);
temp = (temp - temp % 10) / 10;
}
printf("\n");
}
//函数指针调用
void function(int *number, int *digit, void (*fun[])(int*, int*)){
for(int i = 0; i < 3; i++){
fun[i](number, digit);
}
}
int main(){
int *number = (int*)malloc(sizeof(int));
int *digit = (int*)malloc(sizeof(int));
void (*fun[3])(int*, int*) = {outputDigit, outputNumber, outputReverseNumber};
inputNumber(number);
function(number, digit, fun);
free(number);
free(digit);
system("pause");
return 0;
}
方法3:(根据大神@yingxuanying提出的方法,利用C++的string变量定义简化)
#include <iostream>
#include <string>
using namespace std;
int main()
{
string number;
int len;
cout<<"Please enter number: ";
cin>>number;
len = number.length();
cout<<len<<endl;
cout<<number<<endl;
string re_number(number.rbegin(), number.rend());
cout<<re_number<<endl;
system("pause");
return 0;
}