题目:输入一个任意整数(正,负,0都可以),从高位到个位逐个输出每一位数字(正序输出),并统计其位数。
方法一(利用指针存储,适用不指定输入整数位数):
#include<stdio.h>
#include<math.h>
int main()
{
int num,*p,total=0;
scanf("%d",&num);
*p=1;//初始指针为1,若输入“0”,即为一位
num=abs(num);//取绝对值
while(num){
*p=num%10;//逆序将每一位数字赋给指针
num=num/10;
if(num){
*p++;//指针移向下一位,当num==0时不向下移动,不加if判断,最后会将指针*p移向一个空的地址,存储数据未知
}
total++;
}
if(num==0){
total=1;
}
printf("total=%d\n",total);
for(int i=0;i<total;i++){
printf("%d",*p);//从后向前逐个输出
*p--;
}
return 0;
}
方法二(数组存储,适用已知输入数字个数范围):
例:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
int main() {
int arr[5] = { 0 }, num, count=0;
scanf("%d", &num);
while (num) {
arr[count++] = num % 10;
num /= 10;
}
printf("count = %d\n", count);
for (int i = 0;i < count;i++) {
printf("arr[%d] = %d\n", i, arr[i]);
}
/* 正序输出:
for (int i = count-1;i >= 0;i--) {
printf("arr[%d] = %d\n", i, arr[i]);
}*/
return 0;
}