正文

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因数之和%sbool    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;}

阅读(1934) | 评论(0)


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

评论

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