- 题目解读
- 完整代码
给出一个整数,要求:
1>求出它是几位数;
2>分别输出每一位数字;
3>按照逆序输出各位数字,例如原数为123,应输出为32。 题目解读
1.首先需要明确,整数包含正数,负数和零, 所以在测试中应至少测试这三个类型的数; 而且,整数最大为long long类型,八字节,64位二进制数, 无符号数最大可存储2^64-1,二十位数, 存储有符号数时最高位为符号位,只有19位; 2.求几位数,应该用将原数不断的除10,每除一次记录次数加一, 当原数为0时结束函数,返回记录次数,此即为这个整数的位数。
int NumberDigits(int n,int i) //输入位数
{
do
{
n = n / 10;
i++;
} while (n > 0);
return i;
}//n为整数,i用来计数,返回值为该整数位数
3.分别输入每一位数字,要用到取余(%), 用一个变量保存每次取余的值,再用个for循环,从最后一位开始。
void Numberdigit(int n,int i)
{
int r;//定义一个临时变量输出每一位的数字
if (n < 0)//将负数转换为正数最方便
{
n = -n;
}
for (;i > 0;i--)
{
r = n % 10;
n = n / 10;
printf("第%d位的数字为%dn", i, r);
}
}
4.逆序输出,可以用数组也可以不用数组, 不用数组时:(直接输出)
void Backward(int n)
{
int r;
if (n < 0)
{
n = -n;
printf("-");
}
do
{
r = n % 10;
n = n / 10;
printf("%d", r);
} while (n > 0);
}
使用数组时除余后将每个数输进数组即可 但开辟时数组必须规定数组大小,因为不确定数据的大小, 所以应开辟一个比较大内存的数组 但这样会带来内存的浪费, 所以应使用链表来处理数据,存储数字的每一位, 这个方法以后再说完整代码
最后给出这个题目的完整代码:
#define _CRT_SECURE_NO_WARNINGS #includeint NumberDigit(int n,int i) { if (n < 0) { n = -n; } do { n = n / 10; i++; } while (n > 0); return i; } void Numberdigit(int n,int i) { int r; if (n < 0) { n = -n; } for (;i > 0;i--) { r = n % 10; n = n / 10; printf("第%d位的数字为%dn", i, r); } } void Backward(int n) { int r; if (n < 0) { n = -n; printf("-"); } do { r = n % 10; n = n / 10; printf("%d", r); } while (n > 0); } int main() { int n;int i = 0; scanf("%d", &n); i=NumberDigit(n, i); printf("这个数字共有%d位数n", i); Numberdigit(n,i); Backward(n); return 0; }
完结撒花!!!



