c++求教:我做了一道题,但是感觉好复杂,想请个高手帮我化简下,说明一下,我是个超级新手,C++是自学状

来源:百度知道 编辑:UC知道 时间:2024/05/26 08:36:20
//给出一个不多于n位的正整数,要求:(1)求出它是几位数;(2)分别打印出每一位数字;(3)按逆序打印出各位数字,例如原数位123,输出后为321.
#include<iostream.h>
void main()
{
int n;
cin>>n;
{
int i(1);int a;
a=n;
do
{
a=a/10;
i++;
}
while(a>=10);
cout<<"这个数是"<<i<<"位数"<<endl;
}
{
int b;int x;int j(0);
x=n;
do
{
b=x%10;
x=x/10;
j++;
cout<<"第"<<j<<"位是"<<b<<endl;
}
while(x>=1);
}
int y;
cout<<"这个数逆序为";
do
{
y=n%10;
cout<<y;
n=n/10;
}
while(n!=0);
}

我个人认为做这个题没有一点必要,因为你要求输入的是整数(不是小数)那么你完全可以让其直接输入字符,字符串的长度即为位数,输出字符串即为第二问,逆向输出即为第三问!可能对你的题目不是很合适,但是如果你改成输入小数的话,题目还算有点现实意义!看以一个另类的有趣的实现(为了看起来精短,里边用到了标准库里的东西)
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main ()
{
string integer;
cin >> integer;
cout << integer.size();
for(size_t i = 0; i != integer.size(); ++i)
cout << i+1 << ":\t" << integer[i] << endl;
cout << "print the number in reverse order: " << endl;
copy(integer.rbegin(), integer.rend(), ostream_iterator<char>(cout, "\t"));
}
上面的程序不能解决你的问题,但是这是一个有趣的另类解法,不妨看一下!呵呵!

#include<iostream.h>
#include<stdio.h>
#include<string.h>
void main()
{
int n;
cin>>n;
char buf[80];
sprintf(buf, "%d", n);
printf("这是一个%d位整数&#