(1)求位数
eg:
123/1=123 i=1
123/10=12 i=2
123/100=1 i=3
123/1000=0 结束
从中我们可以看出要点如下:
①除数依次乘10
②每次除完都要进行判断,直到出现商为0停止
③要有一个负责计数的变量依次递增。
方法:1:使用for
int Digit_place(int n)
{
int digit = 0;
for (int i = 1; (n/i)!=0; i = i * 10, digit++);
return digit;
}
方法2:使用while
int Digit_place(int n)
{
int digit = 0;
while (n != 0)
{
n = n / 10;
digit = digit + 1;
}
return digit;
}
区别:我觉得虽然本质上相同,但用while更容易理解。
(2)输出各位的数字
方法1:
123%10=3
123%100=23 23/10=2
123%1000=123 123/100=1
从中我们可以看出要点如下:
①归纳总结出规律 n % j/(j/10 )(n为输入的整数,j的初值为10,每次循环都*10)
方法2:
123/100=1 123%100=23
23/10=2 23%10=3
3/1=3 3%1=0
方法1:从个位开始输出
void prin_t(int n)//打印出每一位
{
int m = Digit_place(n);
for (int j = 10,i=1; i<=m; j=j*10,i++)
{
printf("\n从右向左数第%2d位是%2d\n", i,(n % j/(j/10 )));
}
}
方法2:从最高位开始输出
void prin_t(int n)//打印出每一位
{
int m = Digit_place(n);
int index=1;
for (int i = 1; i < m; i++)
{
index = index * 10;
}
while (n != 0)
{
printf("%d", n / index);
n = n % index;
index = index / 10;
}
printf("\n");
}
(3)逆着打印
参见(2):方法1
void reverse(int n)//逆序
{
while (n != 0)
{
printf("%d", n % 10);
n = n / 10;
}
printf("\n");
}
总的代码:
#include<stdio.h>
//题目二
int Digit_place(int n)
{
int digit = 0;
for (int i = 1; (n / i) != 0; i = i * 10, digit++);
return digit;
}
//
void prin_t(int n)//打印出每一位
{
int m = Digit_place(n);
for (int j = 10, i = 1; i <= m; j = j * 10, i++)
{
printf("\n从右向左数第%2d位是%2d\n", i, (n % j / (j / 10)));
}
}
void reverse(int n)//逆序
{
while (n != 0)
{
printf("%d", n % 10);
n = n / 10;
}
printf("\n");
}
//
int main()
{
printf("请输入一个不多于五位的正整数\n");
int n;
scanf_s("%d", &n);
printf("一共有%d位",Digit_place(n));
prin_t(n);
reverse(n);
}
//