正文

C语言版第48次编程比赛 2007-03-10 18:44:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/redstar/23829.html

分享到:

/*
    第一题:......
    第二题:... ...
*/
#include <iostream.h>//
#include <math.h>//
#include <stdlib.h>//使用到exit()函数
#include <conio.h>//使用到获取键盘字符函数
const int MAX_M        =    300;//指数建议不要超过 MAX_M,不然计算结果将无法预料
int* getFactor(const int num);//取得因数表
int SumFactorMod(int n, int s);//取得余数
int SumFactorMod(int n, int m, int s);//取得n^m因数之和%s
bool    test1();
bool    test2();
int main()
{
    const char* text1="   第一题:  输入2个数字n,s。求数字n的所有因数之和除以s的余数.比如输入6 5 6的因数有1,2,3,6,因数之和为12,因为12除以5的余数为2 于是输出2。假设n,m都不超过5000000 \0";
    const char* text2="   第二题:  输入3个数字n, m, s。求数字n的m次方的所有因数之和除以m的余数。比如输入6 2 5 6^2=36 36的因数有1,2,3,4,6,9,12,18,36,因数之和为91 91除以5的余数为1,所以输出1。\0";
    cout<<text1<<endl;
    cout<<text2<<endl;
    cout<<"\n\t\t输入1选择题1进入测试    输入2选择题2进入测试"<<endl;
    char key=_getch();
    while(true)
    {
        switch(key)
        {
        case '1':test1();break;
        case '2':test2();break;
        case 0x1b:exit(0);
        default:break;
        }
        cout<<"请继续选择题目"<<endl;
        key=_getch();
    }
    return false;
}
int* getFactor(const int num)
{
    int *temp=new int[num];
    cout<<"数字n的所有因数如下"<<endl;
    int j=0;
    for(int i=1,k=0;i<=num;i++)
    {
        if(0==num%i)
        {
            cout<<i<<" ";
            temp[k++]=i;
            if(i==num)
            {
                for(j=k;j<num;j++)temp[j]=0;
                return temp;
            }
        }
    }
    cout<<endl;
    return temp;
}
int SumFactorMod(int n, int s)
{
    int *factor=new int[n];
    for(int i=0;i<n;i++)factor[i]=0;
    factor=getFactor(n);
    unsigned int sum=0;
    i=0;
    while(i<n&&factor[i]!=0)
    {
        sum+=factor[i];
        i++;
    }
    cout<<"因数之和为"<<sum<<endl;
    return sum%s;
}
int SumFactorMod(int n, int m, int s)
{
    unsigned int powN_M=(unsigned int)pow(n,m);
    unsigned int sum=SumFactorMod(powN_M,s);
    return sum%s;
}
bool    test1()
{
    cout<<"分别输入两个数n,s:"<<endl;
        int n=0,s=0;
        do{
            cin>>n;
            cin>>s;
            if(n<=0||s<=0)cout<<"n和s不能小于等于0,请重新输入"<<endl;
            if(n>5000000)
            {
                cout<<"n不能超过5000000,请重新输入"<<endl;
            }
            if(s>5000000)
            {
                cout<<"s不能超过5000000,请重新输入"<<endl;
            }
        }while(n>5000000 || s>5000000 || n<=0 || s<=0);
        
        cout<<"数字n的所有因数之和除以s的余数为"<<SumFactorMod( n , s )<<endl;
        return true;
}
bool    test2()
{
    cout<<"分别输入三个数n,m,s:"<<endl;
        int n=0,m=0,s=0;
        do{
            cin>>n;
            cin>>m;
            cin>>s;
            if(n<=0||s<=0)cout<<"n和s不能小于等于0,请重新输入"<<endl;
            if(n>5000000)
            {
                cout<<"n不能超过5000000,请重新输入"<<endl;
            }
            if(m>MAX_M)
            {
                cout<<"m建议不要超过"<<MAX_M<<",否则计算结果将无法预料请重新输入"<<endl;
            }
            if(s>5000000)
            {
                cout<<"s不能超过5000000,请重新输入"<<endl;
            }
        }while(n>5000000 || s>5000000 || n<=0 || s<=0);
  
      
        cout<<"数字"<<n<<"的"<<m<<"次方的所有因数之和除以"<<m<<"的余数"<<SumFactorMod(n,m,s)<<endl;
        return true;
}

阅读(1739) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册