1、题目:拆解整数
编程要求:
- 输入:从键盘1个数(多次测试,输入的数的位数为:1位,2位,3位,4位,5位)
- 输出:如果是负数输出error,否则分别输出(1)这个数的位数(2)正序输出该数(3)逆序输出该数
- 例:输入 325,输出 523
#include<stdio.h>
#include<math.h>
int main(){
int n, m, p, count=0;
scanf("%d", &n);
m=n;
p=n; //n、m、p均为输入的数,count记录位数
//一、求出该数的位数,用n
if(n<0){
printf("error\n");
}else{
do{
count++;
n = n/10;
}while(n!=0);
printf("位数为%d\n", count);
//二、正序输出,用m
printf("正序输出为:");
int divide;
divide = pow(10,count-1); //以除法得m的最高位数字,需要先确定除数的大小,如:321/100 = 3
do{
printf("%d", m/divide);
m = m%divide; //m去掉它的最高位
divide = divide/10;
if(divide!=0){ //该if语句可有可无。有,则可避免多输出结尾的一个空格
printf(" ");
}
}while(divide!=0); //******正序输出则不能用m!=0做判据,否则当输入100、10等数时,输出是不合预期的******
printf("\n");
//三、逆序输出,用p
printf("逆序输出为:");
do{
printf("%d", p%10);
p = p/10;
if(p!=0){
printf(" ");
}
}while(p!=0); //******逆序输出则可以用p!=0做判据******
printf("\n");
return 0;
}
说明:注释中,带星号的部分为注意事项