C/C++ c/c++ 给一个正整数, 要求:①求出它是几位数; ②分别打印出每一位数字; ③按逆序打印出各位数字, 例如原数为321, 应输出123。

这个问题有一个很笨很直接的方法 就是设定很多变量来存放整数的各位数字  且原题目是不超过5位的正整数   这样效率低的没边  不过一般也没有人用这种方法  但是很神奇的是书上的答案就是这种方法    下面给出通解方法

int main()
{
	int weishu(int n);
	void meiyiwei(int n);
	void nixu(int n);
	int a = 0;
	cin >> a;
	int tmp = a;              //储存下a  因为在下面的函数中会改变a 这样在下一个函数中就不再是原来的那个了
	cout << "这是一个" << weishu(a) << "位数" << endl;
	a = tmp;
	meiyiwei(a);
	a = tmp;
	nixu(a);
	return 0;
}

int weishu(int n)
{
	int a = 0;
	while (n)
	{
		n /= 10;
		a++;    
	}
	return a;
}

void nixu(int n)
{
	cout << "逆序为:";
	while (n)            //每次输出它的最后一位 然后把最后一位消去 当等于0的时候就不会进入循环了
	{
		cout << n % 10;
		n /= 10;
	}
	cout << endl;
}

void meiyiwei (int n)
{
	int weishu(int n);
	// 1234 1234
	//  先算他是几位数  因为不知道几位数的话 很难解决 
	int tmp = n;
	int a = weishu(n);
	int chushu = 1;   //如果它是4位 则chushi变为1000  为了得到第一位 
	a -= 1;    
	while (a)
	{
		chushu *= 10;   //4位 乘3次
		a--;
	}
	n = tmp;    //因为上面函数weishu里把n改变了
	cout << "正序为:";
	while (chushu)   //此时1234 除数是1000
	{
		cout << n / chushu<<" ";
		//  1234 
		n %= chushu;  //把最高位消去
		chushu /= 10; 
	}
	cout << endl;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值