23-24C++(38)函数基础——二进制转十进制+回文+组合数+完数

  eg——输入一个8位二进制数,将其转换为十进制数输出
 

例如:11012=1(23)+1(22)+0(21)+1(20)=1310 
所以,如果输入1101,则应输出13。

#include <iostream>
using namespace std;

//调用函数
//计算x的n次方
double power(double x, int n)
{
    int i;
    double d = 1;
    for (i = 0; i < n; i++)
        d *= x;
    return d;
}

//主函数
int main()
{
    int  value = 0;
    char ch;
    cout << "请输入一个8位2进制的数:\n ";
    for (int i = 7; i >= 0; i--)
    {
        cin >> ch;
        if (ch == '1')
            value += static_cast<int>(power(2, i));
        if (ch > '1')
        {
            cout << "输入的值不符合要求" << endl;
            break;
        }
    }
    cout << "该数转化成10进制的数为: \n" << value << endl;;
    return 0;
}

如果使用头文件#include<cmath>

#include <iostream>
using namespace std;

//主函数
int main()
{
    int  value = 0;
    char ch;
    cout << "请输入一个8位2进制的数:\n ";
    for (int i = 7; i >= 0; i--)
    {
        cin >> ch;
        if (ch == '1')
            value += static_cast<int>(pow(2, i));
        if (ch > '1')
        {
            cout << "输入的值不符合要求" << endl;
            break;
        }
    }
    cout << "该数转化成10进制的数为: \n" << value << endl;;
    return 0;
}

运行结果如下——

寻找并输出11~999之间的数m,它满足m、m2和m3均为回文数。
– 回文:各位数字左右对称的整数。
例如:11满足上述条件
      112=121,113=1331.
分析:
用除10取余的方法,从最低位开始,依次取出该数的各位数字。按反序重新构成新的数,比较与原数是否相等,若相等,则原数为回文。

#include<iostream>
using namespace std;
 
//调用函数
bool symm(unsigned n)
{
    unsigned i=n;
    unsigned m=0;
    while(i>0)
    {
        m=m*10+i%10;
        i=i/10;
    }
    return m==n;
}
 
//主函数
int main()
{
    for(unsigned m=11;m<1000;m++)
        if(symm(m)&&symm(m*m)&&symm(m*m*m))
        {
            cout<<" m="<<m<<"\t";
            cout<<" m*m="<<m*m<<"\t";
            cout<<" m*m*m="<<m*m*m<<endl;
        }
        return 0;
}

运行结果如下——

编写一个求n!的函数,并用于求从n个数中取m个数的组合数(m<=n)。组合数=n!/(m!*(n-m)!) 。

#include<iostream>  
using namespace std; 
 
//调用函数
int fact(int n){ //阶乘函数;
	int pro;//pro,即product,乘积,
	if(n<=1)
		pro=1;
	else
		pro=n*fact(n-1);
	return(pro);
}
 
//主函数
int main(){
	int m,n;
	int fact(int);//实现阶乘的函数
	cout<<"请输入m、n,其中m>=n"<<endl;
	cout<<"m=";
	cin>>m;
	cout<<"n=";
	cin>>n;
while(m<n){
	cout<<"输入的值不符合要求!"<<endl;
	cout<<"m=";
	cin>>m;
	cout<<"n=";
	cin>>n;
	}
cout<<"所产生的组合数为:"<<fact(m)/(fact(n)*fact(m-n))<<endl;
return 0;
}

运行结果如下——

编写一个判断一个数是否是完数的函数,用main()函数调用。并求10—100以内的完数有哪些?

#include<iostream>  
using namespace std; 
 
//调用函数
int isPerfectNum(int n)//判断n是否为完数,如果是,则返回1,否则返回0.
{
    int i,s=0;
    for(i = 1; i < n; i ++)//遍历小于n的整数。
        if(n%i==0)//可以整除,为真因子。
            s+=i;//累加每个真因子到s上。 
    if(s==n)
		return 1; //符合完数条件,返回1。
    else return 0;//不是完数,返回0。
}
 
//主函数
int main()
{
    for(int i=10;i<=100;i++)
	{
	
		if(isPerfectNum(i))//判断是否为完数,并输出结果。
			cout<<i<<"是完数"<<endl;
		else
			cout<<i<<"不是完数"<<endl;
	}
	return 0;
}

运行结果如下——

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拔刀能留住落樱吗、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值