如果所求的值超出了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:} 大佬告诉我应该学大数处理 用高精度呗
换用更高精度的数据类型
本帖最后由 jackz007 于 2021-11-7 12:41 编辑
不会啊,c % 1000003 不会超过 1000003,只要一个 int 就可以搞定。
你光给出了 test.out,那么,test.in 呢?
关键是,这个题的目标和要求是什么? 题目要求,输入m,n 输出m的n次方并取余1000003 jackz007 发表于 2021-11-7 12:33
不会啊,c % 1000003 不会超过 1000003,只要一个 int 就可以搞定。
你光给出了 test.out,那么, ...
题目要求,输入m,n 输出m的n次方并取余1000003 本帖最后由 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) ;
} 这样呢?算一下,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;
} 题目要求是“输入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]