栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

输入一个整数。求其位数;输入每一位数字;逆序输入;

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

输入一个整数。求其位数;输入每一位数字;逆序输入;

题目详述:
  • 题目解读
  • 完整代码

给出一个整数,要求:
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
#include
int 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;
}

完结撒花!!!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/311895.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号