卷不动 发表于 2021-11-7 12:29:05

如果所求的值超出了long long int的范围,应该怎么处理?

=================
Expected                                                      |        Yours
476084                                                              |        -675345
==============================
time_space_table:
/2116/sample.in:AC mem=1404k time=2ms
/2116/test.in:WA mem=1404k time=2ms
********************************************************************
#include<stdio.h>
#include<math.h>
int main()
{
    double a,b;
    long long int c,d;
    scanf("%lf %lf",&a,&b);
    c=pow(a,b);
    printf("%lld",c%1000003);
    return 0;
}
/**************************************************************
    Problem: 2116
    User: 211053206
    Language: C
    Result: 答案错误{:10_249:}{:10_249:}

卷不动 发表于 2021-11-21 20:27:44

大佬告诉我应该学大数处理

嘉岳呀 发表于 2021-11-7 12:30:35

用高精度呗

人造人 发表于 2021-11-7 12:30:44

换用更高精度的数据类型

jackz007 发表于 2021-11-7 12:33:59

本帖最后由 jackz007 于 2021-11-7 12:41 编辑

    不会啊,c % 1000003 不会超过 1000003,只要一个 int 就可以搞定。
    你光给出了 test.out,那么,test.in 呢?
    关键是,这个题的目标和要求是什么?

卷不动 发表于 2021-11-7 15:40:42

题目要求,输入m,n 输出m的n次方并取余1000003

卷不动 发表于 2021-11-7 15:41:35

jackz007 发表于 2021-11-7 12:33
不会啊,c % 1000003 不会超过 1000003,只要一个 int 就可以搞定。
    你光给出了 test.out,那么, ...

题目要求,输入m,n 输出m的n次方并取余1000003

jackz007 发表于 2021-11-7 17:52:11

本帖最后由 jackz007 于 2021-11-7 17:54 编辑

卷不动 发表于 2021-11-7 15:40
题目要求,输入m,n 输出m的n次方并取余1000003

      那就试试这个代码呢,看看是否能够交差
#include <stdio.h>

unsigned long long powerx(unsigned long long m , unsigned long long n)
{
      return (! n) ? 1 : m * powerx(m , n - 1)    ;
}

int main(void)
{
      unsigned long long m , n                  ;
      scanf("%I64u%I64u" , & m , & n)             ;
      printf("%I64u\n" , powerx(m , n) % 1000003) ;
}

zhangjinxuan 发表于 2022-8-16 14:38:01

这样呢?算一下,mod一遍?
#include <stdio.h>
#define p 1000003
int main()
{
        long longn,m,res=1;
        scanf("%lld%lld",&n,&m);
        for (int i=0;i<m;++i)
        {
                res*=n%p;
                res%=p;
        }
        printf("%d",res);
    return 0;
}

ExiaGN001 发表于 2022-8-16 23:05:59

题目要求是“输入m,n 输出m的n次方并取余1000003”的话
可以使用快速幂去做。
公式:
(a%c+b%c)%c=(a+b)%c;
(a%c*b%c)%c=(a*b)%c;
由此可得代码:
#include<stdio.h>
#include<math.h>
int main()
{
    int a,b;
    scanf("%d %d",&a,&b);
    int c=a;
    int i=0;
    for(i=0;i<b;i++)
    {c*=(a%1000003);c%=1000003;}
    printf("%d",c);
    return 0;
}
页: [1]
查看完整版本: 如果所求的值超出了long long int的范围,应该怎么处理?