首先我们先看一下题目:将一个三位数的百位,十位,个位分别打印出来。
我们来理解一下题目的意思:表面上看是分别将一个三位数的每一位打印出来,仔细想一想,联系所学,其实它考察的就是我们的itoa函数,那何为itoa函数呢,顾名思义,就是讲一个整型转化为字符串类型输出而已。
然后我们来具体的分析一下:比如我输入一个数字123然后需要将它输出为1、2、3,好的,那我们要怎么操作呢?个位的输出是最简单的,对这个三位数进行10取模然后结果就是个位了,那十位和百位怎么操作呢?且听我细细道来。十位的输出其实也挺简单的,我们先对这个三位数进行除以10运算,得到一个整型数字12,然后我们再对其进行10取模,得到的结果即为十位上的数字。百位的输出怎么输出呢也就很显而易见了,我们只需要在之前对这个三位数进行除以10运算的基础上再除以10得到的一个整型数即为所求的百位上的数。
具体的流程:123 % 10 = 3;
123 / 10 = 12;
12 % 10 = 2;
12 / 10 = 1;
算法的大致执行过程就是这样。其实我们只需要执行一个循环体就能搞定。
下面的是具体的代码:
#include <stdio.h>
#include <string.h>
int itoa(int num,char *str)
{
char *temp = str;
while(num != 0)
{
*str = num % 10 + '0';//先对该数字对10取模
str++;
num = num / 10;//将该数字除以10
}
*str = '\0';
reverse1(temp);//字符串逆序
}
void reverse1(char *str)
{
int len;
char *p;
int i = 0;
char c;
len = strlen(str);//计算长度
p = str + len - 1;//对p所指向得位置操作
while(i < len/2)
{
c = *(str+i);
*(str + i) = *p;
*p = c;//实现两个指针所指向的内容的交换
p--;
i++;
}
for( ;*str != '\0';str++)
printf("%c\n",*str);
}
int main()
{
int num;
char str[32] = {0};
printf("please enter a number:");
scanf("%d",&num);
itoa(num,str);
printf("%s\n",str);
return 0;
}