一个不多于5位的正整数位数统计、各位数值分解

(1)

/*
给出一个不多于5位的正整数。方法1(利用循环获取各个位上数值的同时,计算数的位数)
题目要求
1.求出它是几位数
2.分别输出各位数字
3.按逆序输出各位数字 如原数是321,逆序输出123
编程要求:使用数组
*/

#include <iostream>
using namespace std;
int main()
{
 int n; //n存放要分解的数
 int digit=0,i,temp; //digit存放n的位数
 int a[5]; //数组a中元素存放n的各个位的数值
 cout<<"请输入一个不多于5位的正整数:n=";
 cin>>n;
 while(n<0||n>99999) // 保证输入的n为不大于5的正整数再继续下面程序
 {
   cout<<"您输入的数有误,请重新输入n=";
   cin>>n;
 }
 temp=n;
 for(i=0;i<5;i++) //利用循环分解各个位上数值,逆序存放到数组中
 {
   a[i]=temp%10;
   digit++;
   temp=temp/10;
   if(temp==0)break; 
 }
 cout<<n<<"是"<<digit<<"位数"<<endl;
 cout<<"顺序输出"<<n<<"的各个位为:";
 for(i=digit-1;i>=0;i--)
	 cout<<a[i]<<" ";
 cout<<endl;
 cout<<"逆序输出"<<n<<"的各个位为:"; 
 for(i=0;i<digit;i++)
	 cout<<a[i]<<" ";
 cout<<endl;
 return 0;
}


(2)

/*
给出一个不多于5位的正整数。方法2(先利用循环获取整数位数,再分解各个位上数值)
题目要求
1.求出它是几位数
2.分别输出各位数字
3.按逆序输出各位数字 如原数是321,逆序输出123
编程要求:使用数组
*/

#include <iostream>
using namespace std;
int main()
{
 int n; //n存放要分解的数
 int digit=0,i,temp; //digit存放n的位数
 int a[5]; //数组a中元素存放n的各个位的数值
 cout<<"请输入一个不多于5位的正整数:n=";
 cin>>n;
 while(n<0||n>99999) // 保证输入的n为不大于5的正整数再继续下面程序
 {
   cout<<"您输入的数有误,请重新输入n=";
   cin>>n;
 }
 temp=n;
 while(temp!=0) //利用循环得到数的位数
 { digit++;
   temp=temp/10;
 }
 temp=n;
 for(i=digit-1;i>=0;i--) //利用循环分解各个位上数值,顺序存放到数组中
 {
   a[i]=temp%10;
   temp=temp/10;
  }
 cout<<n<<"是"<<digit<<"位数"<<endl;
 cout<<"顺序输出"<<n<<"的各个位为:";
 for(i=0;i<digit;i++)
	 cout<<a[i]<<" ";
 cout<<endl;
 cout<<"逆序输出"<<n<<"的各个位为:"; 
 for(i=digit-1;i>=0;i--)
	 cout<<a[i]<<" ";
 cout<<endl;
 return 0;
}


(3)

/*
给出一个不多于5位的正整数。方法3(先利用条件分支获取整数位数,再分解各个位上数值)
题目要求
1.求出它是几位数
2.分别输出各位数字
3.按逆序输出各位数字 如原数是321,逆序输出123
编程要求:使用数组
*/

#include <iostream>
using namespace std;
int main()
{
 int n; //n存放要分解的数
 int digit=0,i,temp; //digit存放n的位数
 int a[5]; //数组a中元素存放n的各个位的数值
 cout<<"请输入一个不多于5位的正整数:n=";
 cin>>n;
 while(n<0||n>99999) // 保证输入的n为不大于5的正整数再继续下面程序
 {
   cout<<"您输入的数有误,请重新输入n=";
   cin>>n;
 }
 temp=n;
 
 if(n>=0&&n<=9) //利用if分支得到数的位数
	 digit=1;
 else if (n<=99)
	 digit=2;
      else if(n<=999)
		  digit=3;
	       else if(n<=9999)
			   digit=4;
		         else
					digit=5;

 temp=n;
 for(i=digit-1;i>=0;i--) //利用循环分解各个位上数值,顺序存放到数组中
 {
   a[i]=temp%10;
   temp=temp/10;
  }
 cout<<n<<"是"<<digit<<"位数"<<endl;
 cout<<"顺序输出"<<n<<"的各个位为:";
 for(i=0;i<digit;i++)
	 cout<<a[i]<<" ";
 cout<<endl;
 cout<<"逆序输出"<<n<<"的各个位为:"; 
 for(i=digit-1;i>=0;i--)
	 cout<<a[i]<<" ";
 cout<<endl;
 return 0;
}


(4)

/*
给出一个不多于5位的正整数。方法4(先利用函数调用方式)
题目要求
1.求出它是几位数
2.分别输出各位数字
3.按逆序输出各位数字 如原数是321,逆序输出123
编程要求:使用数组,函数调用
分析
(1)函数1获取正整数位数
(2)函数2完成正整数各个位数值分解,利用传递数组方式
*/

#include <iostream>
using namespace std;
int getDigit(int n);//获取参数n的位数函数
void decompose(int n,int a[]);//将n分解放到a数组中
int main()
{
 int n; //n存放要分解的数
 int digit=0,i; //digit存放n的位数
 int a[5]; //数组a中元素存放n的各个位的数值
 cout<<"请输入一个不多于5位的正整数:n=";
 cin>>n;
 while(n<0||n>99999) // 保证输入的n为不大于5的正整数再继续下面程序
 {
   cout<<"您输入的数有误,请重新输入n=";
   cin>>n;
 }
 digit=getDigit(n); 
 decompose(n,a);
 cout<<n<<"是"<<digit<<"位数"<<endl;
 cout<<"顺序输出"<<n<<"的各个位为:";
 for(i=0;i<digit;i++)
	 cout<<a[i]<<" ";
 cout<<endl;
 cout<<"逆序输出"<<n<<"的各个位为:"; 
 for(i=digit-1;i>=0;i--)
	 cout<<a[i]<<" ";
 cout<<endl;
 return 0;
}

int getDigit(int n)//获取参数n的位数函数
{
  int digit=0;
  while(n!=0)
  {
    digit++;
	n=n/10;
  }
   return  digit;
}

void decompose(int n,int a[])//将n分解放到a数组中
{
   	int digit=getDigit(n),i;
	for(i=digit-1;i>=0;i--) //利用循环分解各个位上数值,顺序存放到数组中
	 {
	   a[i]=n%10;
	   n=n/10;
	  }
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值