鱼C论坛

 找回密码
 立即注册
查看: 2989|回复: 9

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

[复制链接]
发表于 2021-11-7 12:29:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
========[test.out]=========
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: 答案错误
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-11-21 20:27:44 | 显示全部楼层
大佬告诉我应该学大数处理
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-7 12:30:35 | 显示全部楼层
用高精度呗

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-7 12:30:44 | 显示全部楼层
换用更高精度的数据类型
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-7 12:33:59 | 显示全部楼层
本帖最后由 jackz007 于 2021-11-7 12:41 编辑

    不会啊,c % 1000003 不会超过 1000003,只要一个 int 就可以搞定。
    你光给出了 test.out,那么,test.in 呢?
    关键是,这个题的目标和要求是什么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-7 15:40:42 | 显示全部楼层
题目要求,输入m,n 输出m的n次方并取余1000003
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-7 15:41:35 | 显示全部楼层
jackz007 发表于 2021-11-7 12:33
不会啊,c % 1000003 不会超过 1000003,只要一个 int 就可以搞定。
    你光给出了 test.out,那么, ...

题目要求,输入m,n 输出m的n次方并取余1000003
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-7 17:52:11 | 显示全部楼层
本帖最后由 jackz007 于 2021-11-7 17:54 编辑
卷不动 发表于 2021-11-7 15:40
题目要求,输入m,n 输出m的n次方并取余1000003


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

  2. unsigned long long powerx(unsigned long long m , unsigned long long n)
  3. {
  4.         return (! n) ? 1 : m * powerx(m , n - 1)    ;
  5. }

  6. int main(void)
  7. {
  8.         unsigned long long m , n                    ;
  9.         scanf("%I64u%I64u" , & m , & n)             ;
  10.         printf("%I64u\n" , powerx(m , n) % 1000003) ;
  11. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-16 14:38:01 | 显示全部楼层
这样呢?算一下,mod一遍?
  1. #include <stdio.h>
  2. #define p 1000003
  3. int main()
  4. {
  5.         long long  n,m,res=1;
  6.         scanf("%lld%lld",&n,&m);
  7.         for (int i=0;i<m;++i)
  8.         {
  9.                 res*=n%p;
  10.                 res%=p;
  11.         }
  12.         printf("%d",res);
  13.     return 0;
  14. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-24 11:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表