循环算法
#include<stdio.h>
int main()
{
int n;
scanf("%d", &n);
int m;
int a[100];
int k;
while (n >= 10) //当n小于10则直接输出各位数字
{
m = n % 10;
printf("%d\t", m);
n = n / 10;
}
printf("%d\t", n);
return 0;
}
递归算法
#include<stdio.h>
int fun(int num);
int main()
{
int n;
scanf("%d", &n);
fun(n);
return 0;
}
int fun(int num)
{
if (num < 10)
{
printf("%d\n", num);
}
else
{
printf("%d\t", num % 10);
fun(num / 10);
}
return 0;
}
将各个位上的数存放在数组中,通过数组下表输出
#include <stdio.h>
int fun(int num) //返回十进制数的位数
{
int count = 1; //当n为个位数返回1
while (num>9)
{
count++;
num /= 10;
} //count 输入数字对应的位数
return count;
}
int main()
{
unsigned int n = 0;
int k = 1;
int m = 0;
int a[20];
scanf("%d", &n);
int ret = fun(n); //ret值为n对应的位数
while (n >= 10)
{
m = n % 10;
a[k] = m; //使用数组存放数字各个位对应数值
k++;
n /= 10;
}
for (k = 1; k < ret; k++)
{
printf("%d\t", a[k]);
}
printf("%d\n", n); //n为输入数字的最高位
return 0;
}
看一个简单的例子:
输入一个五位数以内的正整数,完成以下操作:① 判断它是几位数;
② 请按序输出其各位数字;
③ 逆序输出其各位数字。这道题只需在上面的算法的基础上稍微修改即可,我们可以将判断输入数字是几位数写成一个函数,顺序输出时,将输入数字的各位数字,保存在数组中,通过判断位数的函数返回值控制下标,输出对应数值,逆序时采用以上3中算法中的一种即可简单实现。
源代码
#include<stdio.h>
int fun(int num) //求数字位数
{
int count = 1;
while (num > 9)
{
count++;
num /= 10;
}
return count;
}
int SeqPrint(int num) //顺序打印输出
{
int i = 1;
int a[10] = { 0 };
int ret = fun(num);
while (num > 9)
{
a[i] = num % 10;
i++;
num /= 10;
}
a[i] = num; //将最高位符值给a[i];
for (i = ret; i >0; i--)
{
printf("%d\t", a[i]);
}
return 0;
}
int main()
{
int n = 0;
int m = 0;
scanf("%d", &n);
printf("%d是%d位数\n", n,fun(n));
printf("按序输出各位数字:\n");
SeqPrint(n);
printf("\n");
printf("逆序输出各位数字:\n");
while (n >= 9)
{
m = n % 10;
printf("%d\t", m);
n /= 10;
}
printf("%d\n", n);
printf("\n");
return 0;
}