为什么会通不过,程序哪里错了吗

题目是“求n个1992的乘积的末两位数是多少”


#include <cstdio>
#include <cmath>
using namespace std;
int main()
{
    int n;
    scanf("%d",&n);
    long long s;
    s=pow(92,n);
    printf("%d\n",s%100);
    return 0;
 } 

这么写就行了:你之前错是因为过程不对,如输入1输出的是91,应该是92才对

img
给你改好了:

#include <cstdio>
#include <cmath>
using namespace std;
int main()
{
    int n,i;
    scanf("%d",&n);
    long long s=1;
    for(i=0;i<n;i++){
        s*=1992;
    }
    printf("%d\n",s%100);
    return 0;
 }

第11行,因为是long long 类型,所以应改为:

printf("%lld", s%100);

参考这个
int、long、long long在printf中的格式_企鹅的自我修养-CSDN博客 在printf中%d用于int或者比int小的整数类型。比int小的类型被转型成int。%ld用于long类型,%lld用于long long类型。%x标识的数会被当成int进行读取,所以long long类型的数如果超过int的范围会被截断,得不到正确的结果。而且因为它多占了4个字节,还会影响后面的其它标识符的输出。另外%f标识的数会被当成double读取,即取出8个字节读取 https://blog.csdn.net/fz_ywj/article/details/8107582?ops_request_misc=&request_id=&biz_id=102&utm_term=long%20long%20%E6%98%AF%25d%E5%90%97&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~sobaiduweb~default-2-.pc_v2_rank_blog_default&spm=1018.2226.3001.4450

既然是只需要后两位,那么没必要每次都乘以实际数,可如下处理:

#include <cstdio>
#include <cmath>
using namespace std;
int main()
{
    int n,i;
    scanf("%d",&n);
    int s=1;
    for(i=0;i<n;i++){
        s*=92;
        s %= 100;
    }
    printf("%d\n",s);
    return 0;
 }