C++课后题

设计一个函数int digit(long n,int k),它返回整数n从右边开始第k个数字的值,若不存在第k个数字则返回-1。例如digit(123456,2)=5  digit(3456,6)=-1 //位数不够,返回-1

#include<iostream>
using namespace std;
int digit(long n,int k)
{
    long temp=n;int len=0;
    while(temp)
    {
        temp/=10;
        len++;
    }
    temp=n;
    if(k<0)
    return -1;
    if(k>len)
    return -1;
    int a=0;
    while(k)
    {
        a=temp%10;
        temp/=10;
        k--;
    }
    return a;
}
int main()
{
    long n;int k;
    cin>>n>>k;
    cout<<digit(n,k);
    return 0;
}

写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用两个函数,并输出结果,两个整数由键盘输入。

#include<iostream>
using namespace std;
int gcd(int a,int b)
{
    int k=0;
    if(a<b)
    {
        k=b;
        b=a;
        a=k;
    }
    k=0;
    while(a%b!=0)
    {
        k=a%b;
        a=b;
        b=k;
    }
    return b;
}
int main()
{
    int a,b,k=0;
    cin>>a>>b;
    k=gcd(a,b);
    cout<<k<<' '<<a/k*b;
    return 0;
    
}

求最大公约数用辗转相除法,大数除以小数取余数继续除下去

最小公倍数等于两数相乘除以最大公约数

进制转换

#include<iostream>
using namespace std;
int toocr(int n)
{
    int temp,outcome=0,i=1;
    while(n)
    {
        temp=n%8;
        outcome+=temp*i;
        i*=10;
        n/=8;
    }
    return outcome;
}
int main()
{
    int n;
    cin>>n;
    cout<<toocr(n);
    return 0;
}

10转8

#include<iostream>
using namespace std;
int toocr(int n)
{
    int temp,outcome=0,i=1;
    while(n)
    {
        temp=n%2;
        outcome+=temp*i;
        i*=10;
        n/=2;
    }
    return outcome;
}
int main()
{
    int n;
    cin>>n;
    cout<<toocr(n);
    return 0;
}

10转2

#include<iostream>
#include<string>
using namespace std;
int main()
{
    int n, temp; string s = " ";
    cin >> n;
    if (n == 0)cout << 0;
    while (n)
    {
        temp = n % 16;
        n /= 16;
        if (temp < 10)
            s = char('0' + temp) + s;
        else
            s = char('A' + temp - 10) + s;
    }
    cout << s;
    return 0;
}

10转16

400之内的亲密对数。所谓亲密对数,即A的所有因子(包含1但不包含其本身)之和等于B,而B的所有因子之和等于A

 

 220284220的因子是1245101120,224455110,它们之和为284,而284的因子是12471142,它们之和为220,所以220284为一对亲密对数

#include<iostream>
using namespace std;
int sum(int n)
{
    int sum=0;
    for(int i=1;i<n;i++)
    {
        if(n%i==0)
        sum+=i;
    }
    return sum;
}
int main()
{
    int i,k;
    for(i=1;i<=400;i++)
    {
        k=sum(i);
        if(sum(k)==i&&i<k)
        cout<<i<<' '<<k<<endl;
    }
    return 0;
}

任意输入10个正整数,求出其中互不相同的数的个数num,以及此num个数中哪一个数的出现次数最多,共出现了几次。

例如,当输入的10个数为:3241323538,则其中互不相同的数的个数num=6,而3出现次数最多,共出现了4次。

#include<iostream>
using namespace std;
int main()
{
    int s[10], p[10][2] = { 0 };
    int num = 0, maxnum = 0, max = 0;
    int j, i;
    for (i = 0; i < 10; i++)
    {
        cin >> s[i];
        for (j = 0; j < i; j++)
        {
            if (p[j][0] == s[i])
            {
                p[j][1]++;
                break;
            }
        }
        if (j >= i)
        {
            p[j][0] = s[i];
            num++;
            p[j][1]++;
        }
    }
    for (j = 0; j < 10; j++)
    {
        if (p[j][1] > maxnum)
        {
            maxnum = p[j][i];
            max = p[j][0];
        }
    }
    cout << num << ' ' << max << ' ' << maxnum;
    return 0;
}

 

posted @ 2020-12-23 17:06  Dk只能爬  阅读(430)  评论(0编辑  收藏  举报