| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2394 人关注过本帖
标题:N!对10007取余
只看楼主 加入收藏
QATyy
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2016-4-27
收藏
 问题点数:0 回复次数:6 
N!对10007取余
题目:请求N!(N<=10000),输出结果对10007取余
输入
每行一个整数n,遇到-1结束。
输出
每行一个整数,为对应n的运算结果。
Sample Input
1
2
-1
Sample Output
1
2

[此贴子已经被作者于2016-9-18 21:51编辑过]

2016-09-18 21:42
魑魅
Rank: 1
等 级:新手上路
帖 子:77
专家分:9
注 册:2016-9-18
收藏
得分:0 
#include<stdio.h>
#include<stdlib.h>
typedef struct cun
{
    int i;
    struct cun *next;
}c;
int main()
{
    c *head,*p,*q;
    head=(c*)malloc(sizeof(c));
    q=head;
    while(1)
    {
        p=(c*)malloc(sizeof(c));
        scanf("%d",&p->i);
        if(p->i==-1)
        break;
        p->i=p->i%10007;
        q->next=p;
        q=p;
    }
    q->next=NULL;
    for(q=head->next;q!=NULL;q=q->next)
    {
        printf("%d\n",q->i);
    }
    return 0;
}
2016-09-21 20:26
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
还需要链表?
(a*b)%c == ((a%c)*(b%c))%c
2016-09-21 22:51
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
10000的叹号很大  天文数字

DO IT YOURSELF !
2016-09-22 15:10
vvvcuu
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:12
帖 子:353
专家分:1253
注 册:2014-4-22
收藏
得分:0 
这样可以不?
程序代码:
#include "stdio.h"
int main()
{    
     int n,result,i;
     printf("请输入数字n,或者输入 -1 退出程序:\n"); 
     while((1==scanf("%d",&n))&&n!=-1){
            result=1;
           for(i=2;i<=n;i++)
             result=result*i%10007;
           printf("\nresult:   %d  \n\n",result);
           printf("继续请输入数字n, 或者输入-1退出程序:\n\n"); 
     } 
     return 0;
}


代码测试环境:  WinXP+C-Free5.0.
2016-09-22 21:53
lianyicq
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:26
帖 子:737
专家分:3488
注 册:2013-1-26
收藏
得分:0 
这个问题还挺有意思。考虑了一下,其实就是要避开算n!。
想了一个计算方法,为了更具体,举例如下,看明白了,代码根本不是事儿。
图片附件: 游客没有浏览图片的权限,请 登录注册



[此贴子已经被作者于2016-9-23 09:30编辑过]


大开眼界
2016-09-23 09:24
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
收藏
得分:0 
这样可以保证每次m的值都不会超过int的最大值

程序代码:
#include<stdio.h>
#include<stdlib.h>

int main()
{
    int i,n,m;
    int *p = malloc(sizeof(int));
    int *q;
    int count = 0;

    while (1)
    {
        m = 1;
        n = -1;
        scanf("%d",&n);
        if (-1 == n)
        {
            break;
        }
        for (i = 1; i <= n; i++)
        {
            m *= i;
            m = m % 10007;
        }
        p[count] = m;
        count++;
        q = realloc(p, (count + 1) * sizeof(int));
        p = q;
        
    }
    for (i = 0; i < count; i++)
    {
        printf("%d\n",p[i]);
    }
    free(p);
    return 0;
}
2016-09-23 10:16
快速回复:N!对10007取余
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027694 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved