题目描述:

给出一个不多于 5 位的整数,要求:

1、求出它是几位数 

2、分别输出每一位数字 

3、按逆序输出各位数字,例如原数为 321,应输出 123

输入:

一个不大于5位的数字

输出

一共三行,第一行:位数 

第二行: 用空格分开的每个数字,注意最后一个数字后没有空格 

第三行: 按逆序输出这个数

样例输入:

12345

样例输出:

5

1 2 3 4 5

54321


解题思路:



先定义一个数组用来存放每一位数字,再定义一个 n 作为输入的数,接着定义一个 number 来记录是几位数。


定义一个 for 循环,n % 10 的值赋给 num[],这样就可以获取得最后一个数;n = n / 10 向前进位,n 是没有小数位的。此时 num[] 这个数组里面的数字和输入的顺序是相反的。


再定义一个 for 循环,倒过来输出 num[],记住用空格分开的每个数字,注意最后一个数字后没有空格。


最后按照 num[]的顺序输出,也就是逆序输出。




参考代码:



#include<iostream>
using namespace std;
int main()
{
	int num[5];  //定义一个有 5 个元素的数组
	int n;
	int number = 0; //记录数位
	cin >> n;  //获取输入的数
	for (int i = 0; i < 5; i++) {  //
		if (n == 0) break;  //如果输入的数为 0 则退出这个循环
		else {
			num[i] = n % 10;  //获取最后一位数,num[0] 为最后一个数,num[1] 是倒数第二个数
			n = n / 10;  //n 向前进 1 位,无小数点
			number++;
		}
	}
	cout << number << endl;  //输出数位
	for (int i = number - 1; i >= 0; i--) {
		if (i != 0) {  //如果 num[i] 不是最后一个数,则加一个空格
			cout << num[i] << " ";
		}
		else cout << num[i];  //输出最后一个数
	}
	cout << endl;  //换行
	for (int i = 0; i < number; i++) {
		cout << num[i];  //按照 num[i] 顺序输出
	}
	return 0;
}

本地运行结果如下图:Project4_2018-08-06_17-37-27.png

点赞(21)
 

0.0分

74 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 57 条评论

Gwen 1年前 回复TA
#include<iostream>
using namespace std;
void f(int t)
{
	if (t > 0 && t < 10)
	{
		cout << t<<" ";
    }
	else
	{
		f(t / 10);
		cout <<t%10<< " ";
	}

}
int main()
{
	system("color 03");
	int n,sum=0,t,a,b,r,q,m;
	cin >> n;
	t = n;
	r = n;
	for (int i = 1; i <= t; i++)
	{
		a = n % 10;
		n = n / 10;
		sum = sum + 1;
		if (n < 10)break;
	}
	sum = sum + 1;
	cout << sum << endl;
	f(n);
	cout << endl;
	for (int i = 1; i <=r; i++)
	{
		q= t % 10;
		t= t / 10;
		cout << q;
		if (t<=0)break;
	}
	
	
}
在这个里面的递归函数怎么只能出个1啊,放在别的项目里却能正常输出1 2 3 4 5
NZD 1年前 回复TA
c++新手建议看看这个,比较好理解awa
#include <iostream>
#include <cmath>
using namespace std;
int main(){
    int n;
    cin>>n;
    int k=n,a=0;
    while (k){
        k/=10;
        a++;
    }
    cout<<a<<endl;
    int b[a]={0};
    for (int i=0; i<a; i++){
        b[i]=n/pow(10,(a-i-1));
        n-=b[i]*pow(10,a-i-1);
        cout<<b[i]<<' ';
    }
    cout<<endl;
    for (int i=a-1; i>=0; i--)
        cout<<b[i];
    return 0;
}
uq_35669651734 1年前 回复TA
#include<iostream>
#include<string>
using namespace std;
int main()
{
    string num;
    cin >> num;

	int len = num.length();
	cout << len << endl;
	
	for (int i = 0; i < len; i++) {
		cout << num[i] << " ";
	}
	cout << endl;

	string new_num;
	for (;len >= 0; len--) {
		new_num.append(1,num[len]);
	}
	cout << new_num << endl;
}
我这个结果没问题啊
butchure 1年前 回复TA
判断数组长度是不是有问题,你写的是当n为0就输出位数,但是还有后面的数字没有判断,就比如100,你取整为0,那100是1位数?
Magical 1年前 回复TA
#include <iostream>

using namespace std;
void figure(int n)
{
    int count=0;
    while(n!=0){n/=10;count++;}
    cout<<count<<endl;
}
void sep(int n)
{
    int a1,a2,a3,a4,a5;
    a1=n%10;
    a2=n/10%10;
    a3=n/100%10;
    a4=n/1000%10;
    a5=n/10000%10;
    cout<<a5<<a4<<a3<<a2<<a1<<endl;
}
void rev(int n)
{
    int a1,a2,a3,a4,a5;
    a1=n%10;
    a2=n/10%10;
    a3=n/100%10;
    a4=n/1000%10;
    a5=n/10000%10;
    cout<<a1<<a2<<a3<<a4<<a5<<endl;
}
int main()
{
    int x;
    cin>>x;
    figure(x);
    sep(x);
    rev(x);
    return 0;
}
YF 1年前 回复TA
@哈哈哈 这是c++,你发个C
哈哈哈 2年前 回复TA
@哈哈哈 求怎么修简便一点
哈哈哈 2年前 回复TA
#include<stdio.h>

int main()
{
	int x;
	int y;
	int num;
	scanf("%d", &x);
	int z = x;
	for(y=0;z!=0;y++){
		z=z / 10;	
	}printf("%d\n", y);

	int mask = 1;
	int v = x;
	int n = x;

	while (v > 9) {
		v = v / 10;
		mask = mask * 10;
	}
	do {
		int d = x / mask;
		printf("%d ", d);
		x = x % mask;
		mask=mask / 10;
	} while (x > 0);
	printf("\n");
	while (n > 0) {
		num=n%10;
		printf("%d", num);
		n=n / 10;
	}

	return 0;
}
uq_81526523924 2年前 回复TA
@AkMoney #include <iostream> using namespace std; int main()  { 	int a,arr[10],n=0,sum=0; 	cin>>a; 	if(a==0) cout<<0<<endl; 	while(a){ 		arr[n]=a%10; 		sum=(sum*10+a%10); 	    a=(a-a%10)/10; 		n++;  	} 	cout<<n<<endl; 	for(int i=n-1;i>=0;i--) 	{ 		cout<<arr[i]<<" "; 		if(i==0) cout<<endl; 	} 	 	cout<<sum<<endl;  }
白眉鹰王殷天正 3年前 回复TA
为何不用函数(递归)?