ZZNUOJ(C/C++)基础练习1081——1090(详解版)

news2025/3/13 18:11:17

目录

 1081 : n个数求和 (多实例测试)

C

C++

1082 : 敲7(多实例测试)

C

C++

1083 : 数值统计(多实例测试)

C

C++

 1084 : 计算两点间的距离(多实例测试)

C

C++ 

1085 : 求奇数的乘积(多实例测试)

C

C++

1086 : ASCII码排序(多实例测试)

C

C++

1087 : 获取出生日期(多实例测试)

C

C++

1088 : 手机短号 (多实例)

C

C++

1089 : 阶乘的最高位

C

C++

法二C(利用对数知识点)

1090 : 整数幂(多实例测试)

C

C++(使用快速幂算法)


 

 Alt + F4:在大多数窗口程序中,按下Alt + F4可以关闭当前窗口或程序。

“EOF”是“End of File”的缩写,意思是“文件结束”。它通常用于计算机编程和文件处理中,表示已经到达文件的最后一个字节,后面没有更多的数据了。

 1081 : n个数求和 (多实例测试)

题目描述

求n个整数的和。

输入

输入第一行是一个整数T,表示有T组测试实例;
每组输入包括两行:
第一行一个数n表示接下来会有n个整数;
第二行空格隔开的n个数。

输出

对于每组输入,在一行输出n个数的和(保证和不会超出int类型的范围)!

样例输入

2
3
1 2 3
4
-1 0 -19 22

样例输出

6
2

C

#include<stdio.h> // 包含标准输入输出库

// 定义一个函数solve,用于处理每组数据的求和操作
void solve()
{
    int n; // 定义变量n,表示每组数据中的整数个数
    scanf("%d", &n); // 从标准输入读取整数n

    int mid, sum = 0; // 定义变量mid用于临时存储每个整数,sum用于存储总和
    for (int i = 0; i < n; i++) // 循环n次,读取每个整数
    {
        scanf("%d", &mid); // 从标准输入读取一个整数mid
        sum += mid; // 将mid加到总和sum中
    }
    printf("%d\n", sum); // 输出总和sum
}

int main()
{
    int T = 1; // 定义变量T,表示测试用例的数量,默认值为1
    scanf("%d", &T); // 从标准输入读取测试用例的数量T

    while (T--) // 循环T次,每次循环T减1
    {
        solve(); // 调用solve函数,处理一组数据的求和操作
    }

    return 0; // 程序正常结束
}

C++

#include<iostream> // 包含C++标准输入输出流库
using namespace std; // 使用标准命名空间

// 定义一个函数solve,用于处理每组数据的求和操作
void solve()
{
    int n; // 定义变量n,表示每组数据中的整数个数
    scanf("%d", &n); // 从标准输入读取整数n

    int mid, sum = 0; // 定义变量mid用于临时存储每个整数,sum用于存储总和
    for (int i = 0; i < n; i++) // 循环n次,读取每个整数
    {
        scanf("%d", &mid); // 从标准输入读取一个整数mid
        sum += mid; // 将mid加到总和sum中
    }
    printf("%d\n", sum); // 输出总和sum
}

int main()
{
    int T = 1; // 定义变量T,表示测试用例的数量,默认值为1
    scanf("%d", &T); // 从标准输入读取测试用例的数量T

    while (T--) // 循环T次,每次循环T减1
    {
        solve(); // 调用solve函数,处理一组数据的求和操作
    }

    return 0; // 程序正常结束
}

1082 : 敲7(多实例测试)

题目描述

输出7和7的倍数,还有包含7的数字例如(17,27,37...70,71,72,73...)

输入

首先输入一个整数t,表示有t组数据。
然后有t行,每行一个整数N。(N不大于30000)

输出

对于每组数据 ,输出从小到大排列的不大于N的与7有关的数字。每组数据占一行,每个数字后面有一个空格;

样例输入

2
20
30

样例输出

7 14 17
7 14 17 21 27 28

C

#include<stdio.h> // 包含标准输入输出库

// 定义一个函数solve,用于处理每组数据
void solve()
{
    int n; // 定义变量n,表示输入的整数
    scanf("%d", &n); // 从标准输入读取整数n

    // 从7开始循环到n
    for (int i = 7; i <= n; i++)
    {
        // 如果i能被7整除
        if (i % 7 == 0)
        {
            printf("%d ", i); // 输出i
        }
        else
        {
            int mid = i; // 定义变量mid,用于存储当前数字i
            // 检查i的每一位是否包含数字7
            while (mid != 0)
            {
                if (mid % 10 == 7) // 如果当前位是7
                {
                    printf("%d ", i); // 输出i
                    break; // 退出循环
                }
                mid /= 10; // 去掉当前位,继续检查下一位
            }
        }
    }
    printf("\n"); // 输出换行符
}

int main()
{
    int T = 1; // 定义变量T,表示测试用例的数量,默认值为1
    scanf("%d", &T); // 从标准输入读取测试用例的数量T

    // 循环T次,每次调用solve函数处理一组数据
    while (T--)
    {
        solve();
    }

    return 0; // 程序正常结束
}

C++

#include<iostream>
#include<algorithm>
using namespace std;

// 定义一个函数,用于检查一个数字是否包含7
int containsSeven(int num)
{
    while (num != 0)
    {
        if (num % 10 == 7)
        {
            return 1; // 如果包含7,返回1
        }
        num /= 10; // 去掉当前位,继续检查下一位
    }
    return 0; // 如果不包含7,返回0
}

void solve()
{
    int n;
    scanf("%d", &n); // 从标准输入读取整数n

    // 从7开始循环到n
    for (int i = 7; i <= n; i++)
    {
        if (i % 7 == 0 || containsSeven(i)) // 如果i能被7整除或者包含7
        {
            printf("%d ", i); // 输出i
        }
    }
    printf("\n"); // 输出换行符
}

int main()
{
    int T = 1;
    scanf("%d", &T); // 从标准输入读取测试用例的数量T

    // 循环T次,每次调用solve函数处理一组数据
    while (T--)
    {
        solve();
    }

    return 0; // 程序正常结束
}

1083 : 数值统计(多实例测试)

题目描述

统计给定的n个数中,负数、零和正数的个数

输入

输入数据有多组,每组占一行,每行的第一个数是整数n(n<100),表示需要统计的数值的个数,然后是n个实数;如果n=0,则表示输入结束,该行不做处理。
 

输出

对于每组输入数据,输出一行a,b和c,分别表示给定的数据中负数、零和正数的个数。

样例输入

6 0 1 2 3 -1 0
5 1 2 3 4 0.5
0

样例输出

1 2 3
0 0 5

C

#include<stdio.h> // 包含标准输入输出库

// 定义一个函数solve,用于处理每组数据
void solve(int n)
{
    int small = 0, zero = 0, big = 0; // 定义变量small、zero和big,分别用于统计负数、零和正数的数量

    // 循环n次,读取每个浮点数
    for (int i = 0; i < n; i++)
    {
        double mid; // 定义变量mid,用于存储当前读取的浮点数
        scanf("%lf", &mid); // 从标准输入读取一个浮点数mid

        // 根据mid的值,更新相应的计数器
        if (mid > 0)
        {
            big++; // 如果mid是正数,big计数器加1
        }
        else if (mid == 0)
        {
            zero++; // 如果mid是零,zero计数器加1
        }
        else
        {
            small++; // 如果mid是负数,small计数器加1
        }
    }

    // 输出负数、零和正数的数量
    printf("%d %d %d\n", small, zero, big);
}

int main()
{
    int T = 1; // 定义变量T,表示测试用例的数量,默认值为1

    // 使用while循环读取输入,直到T为0
    while (scanf("%d", &T), T != 0)
    {
        solve(T); // 调用solve函数,处理一组数据
    }

    return 0; // 程序正常结束
}

C++

#include<iostream> // 包含C++标准输入输出流库
using namespace std; // 使用标准命名空间

// 定义一个函数solve,用于处理每组数据
void solve(int n)
{
    int small = 0, zero = 0, big = 0; // 定义变量small、zero和big,分别用于统计负数、零和正数的数量

    // 循环n次,读取每个浮点数
    for (int i = 0; i < n; i++)
    {
        double mid; // 定义变量mid,用于存储当前读取的浮点数
        scanf("%lf", &mid); // 从标准输入读取一个浮点数mid

        // 根据mid的值,更新相应的计数器
        if (mid > 0)
        {
            big++; // 如果mid是正数,big计数器加1
        }
        else if (mid == 0)
        {
            zero++; // 如果mid是零,zero计数器加1
        }
        else
        {
            small++; // 如果mid是负数,small计数器加1
        }
    }

    // 输出负数、零和正数的数量
    printf("%d %d %d\n", small, zero, big);
}

int main()
{
    int T = 1; // 定义变量T,表示测试用例的数量,默认值为1

    // 使用while循环读取输入,直到T为0
    while (scanf("%d", &T), T != 0)
    {
        solve(T); // 调用solve函数,处理一组数据
    }

    return 0; // 程序正常结束
}

 1084 : 计算两点间的距离(多实例测试)

题目描述

输入两点坐标(X1,Y1),(X2,Y2),计算并输出两点间的距离。

输入

输入数据有多组,每组占一行,由4个实数组成,分别表示x1,y1,x2,y2,数据之间用空格隔开。

输出

对于每组输入数据,输出一行,结果保留两位小数。

样例输入

0 0 0 1
0 1 1 0

样例输出

1.00
1.41

C

#include<stdio.h> // 包含标准输入输出库
#include<math.h>  // 包含数学库,用于计算平方根

int main()
{
    double x1, y1, x2, y2; // 定义四个变量,分别表示两个点的坐标 (x1, y1) 和 (x2, y2)

    // 使用while循环读取输入,直到输入结束(EOF)
    while (scanf("%lf %lf %lf %lf", &x1, &y1, &x2, &y2) != EOF)
    {
        // 计算两点之间的欧几里得距离
        // 公式:distance = sqrt((x2 - x1)^2 + (y2 - y1)^2)
        double distance = sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));

        // 输出计算得到的距离,保留两位小数
        printf("%.2f\n", distance);
    }

    return 0; // 程序正常结束
}

C++ 

#include<iostream> // 包含C++标准输入输出流库
#include<algorithm> // 包含算法库(虽然在这段代码中未使用到)
#include<cmath> // 包含数学库,用于计算平方根
#include<iomanip> // 包含输入输出流格式化库,用于设置输出精度
using namespace std; // 使用标准命名空间

int main()
{
    double x1, y1, x2, y2; // 定义四个变量,分别表示两个点的坐标 (x1, y1) 和 (x2, y2)

    // 使用while循环读取输入,直到输入结束
    while (cin >> x1 >> y1 >> x2 >> y2)
    {
        // 计算两点之间的欧几里得距离
        // 公式:distance = sqrt((x2 - x1)^2 + (y2 - y1)^2)
        double distance = sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));

        // 使用cout输出计算得到的距离,保留两位小数
        // setprecision(2) 设置小数点后保留2位
        // fixed 确保输出固定的小数点格式
        cout << setprecision(2) << fixed << distance << endl;
    }

    return 0; // 程序正常结束
}

1085 : 求奇数的乘积(多实例测试)

题目描述

给你n个整数,求他们中所有奇数的乘积

输入

输入数据包含多个测试实例,每个测试实例占一行,每行的第一个数为n,表示本组数据一共有n个,接着是n个整数,你可以假设每组数据必定至少存在一个奇数。

输出

输出每组数中的所有奇数的乘积,对于测试实例,输出一行。

样例输入

3 1 2 3
4 2 3 4 5

样例输出

3
15

注意:输入的n个整数中,可能有负数,要用mid%2 != 0来判断是否为奇数

C

#include<stdio.h>  // 包含标准输入输出库

int main() {
    int n;  // 用于存储每组数据的整数个数
    // 使用 while 循环读取多组数据,直到输入结束(EOF)
    while(scanf("%d", &n) != EOF) {
        long long mul = 1;  // 初始化乘积为1,用于存储奇数的乘积
        int mid;  // 用于临时存储每个输入的整数
        // 循环读取 n 个整数
        for(int i = 0; i < n; i++) {
            scanf("%d", &mid);  // 读取一个整数到 mid
            // 判断 mid 是否为奇数
            if(mid % 2 != 0) {
                mul *= mid;  // 如果是奇数,将其乘到 mul 中
            }
        }
        printf("%lld\n", mul);  // 输出当前组奇数的乘积
    }
    return 0;  // 程序正常结束
}

C++

#include<iostream>  // 包含C++标准输入输出流库
using namespace std; // 使用标准命名空间,避免每次调用标准库功能时都要写std::

int main() {
    int n; // 用于存储每组数据的整数个数
    // 使用 while 循环读取多组数据,直到输入结束(EOF)
    while(scanf("%d", &n) != EOF) {
        long long mul = 1; // 初始化乘积为1,用于存储奇数的乘积
        int mid; // 用于临时存储每个输入的整数
        // 循环读取 n 个整数
        for(int i = 0; i < n; i++) {
            scanf("%d", &mid); // 读取一个整数到 mid
            // 判断 mid 是否为奇数
            if(mid % 2 != 0) {
                mul *= mid; // 如果是奇数,将其乘到 mul 中
            }
        }
        printf("%lld\n", mul); // 输出当前组奇数的乘积
    }
    return 0; // 程序正常结束
}

1086 : ASCII码排序(多实例测试)

题目描述

输入三个字符后,按各字符的ASCII码从小到大的顺序输出这三个字符。

输入

输入数据有多组,每组占一行,有三个字符组成,之间无空格。

输出

对于每组输入数据,输出一行,字符中间用一个空格分开。

样例输入

qwe
asd
zxc

样例输出

e q w
a d s
c x z

C

了解指针:踏入编程绮梦,探寻指针隐匿的奥妙踪迹-CSDN博客

#include<stdio.h>  // 包含标准输入输出库

// 函数声明,用于对三个字符进行排序
void solve(char *a, char *b, char *c) {
    char mid;  // 用于临时存储字符
    // 比较 a 和 b,如果 a > b,则交换它们
    if(*a > *b) {
        mid = *a;
        *a = *b;
        *b = mid;
    }
    // 比较 a 和 c,如果 a > c,则交换它们
    if(*a > *c) {
        mid = *a;
        *a = *c;
        *c = mid;
    }
    // 比较 b 和 c,如果 b > c,则交换它们
    if(*b > *c) {
        mid = *b;
        *b = *c;
        *c = mid;
    }
}

int main() {
    char ch1, ch2, ch3;  // 定义三个字符变量
    // 使用 while 循环读取输入,直到输入结束(EOF)
    while(scanf("%c%c%c", &ch1, &ch2, &ch3) != EOF) {
        solve(&ch1, &ch2, &ch3);  // 调用 solve 函数对三个字符进行排序
        printf("%c %c %c\n", ch1, ch2, ch3);  // 输出排序后的结果
        getchar();  // 读取换行符,避免影响下一次输入
    }
    return 0;  // 程序正常结束
}

C++

了解C++的引用:漫步 C++ 之途,领略引用的独特风姿-CSDN博客

#include<iostream>  // 包含标准输入输出流库
using namespace std; // 使用标准命名空间,避免每次调用标准库功能时都要写std::

// 函数声明,用于对三个字符进行排序
void solve(char &a, char &b, char &c) {
    char mid;  // 用于临时存储字符
    // 比较 a 和 b,如果 a > b,则交换它们
    if(a > b) {
        mid = a;
        a = b;
        b = mid;
    }
    // 比较 a 和 c,如果 a > c,则交换它们
    if(a > c) {
        mid = a;
        a = c;
        c = mid;
    }
    // 比较 b 和 c,如果 b > c,则交换它们
    if(b > c) {
        mid = b;
        b = c;
        c = mid;
    }
}

int main() {
    char ch1, ch2, ch3;  // 定义三个字符变量
    // 使用 while 循环读取输入,直到输入结束(EOF)
    while(scanf("%c%c%c", &ch1, &ch2, &ch3) != EOF) {
        solve(ch1, ch2, ch3);  // 调用 solve 函数对三个字符进行排序
        printf("%c %c %c\n", ch1, ch2, ch3);  // 输出排序后的结果
        getchar();  // 读取换行符,避免影响下一次输入
    }
    return 0;  // 程序正常结束
}

1087 : 获取出生日期(多实例测试)

题目描述

输入某人的18位身份证号,输出其出生日期。

输入

多实例测试。首先输入一个整数n,表示测试实例的个数,然后是n行,每行是一个18位身份证号。

输出

对于输入的每个身份证号,输出一行,即其对应的出生日期,输出格式为:yyyy-mm-dd。

样例输入

3
410106199411178657
410104198202095479
410122197911218097

样例输出

1994-11-17
1982-02-09
1979-11-21

了解“输入跳过”步入 C/C++ 天地,浅探输入跳过的奇妙诀窍-CSDN博客

C

#include<stdio.h>
#include<math.h>

// 定义一个函数 solve,用于处理每个身份证号并输出出生日期
void solve() {
    int year, month, day;  // 定义三个变量,分别存储年、月、日
    // 使用 scanf 读取输入的身份证号,并提取出生日期部分
    // %*6d:跳过前6个字符(身份证号的前6位是地址码)
    // %4d:读取接下来的4个字符作为年份
    // %2d:读取接下来的2个字符作为月份
    // %2d:读取接下来的2个字符作为日期
    // %*4d:跳过最后4个字符(身份证号的后4位是顺序码和校验码)
    scanf("%*6d%4d%2d%2d%*4d", &year, &month, &day);
    // 使用 printf 输出格式化的日期,格式为 yyyy-mm-dd
    printf("%04d-%02d-%02d\n", year, month, day);
}

int main() {
    int T;  // 定义变量 T,表示测试实例的个数
    // 读取测试实例的个数
    scanf("%d", &T);
    // 使用 while 循环处理每个测试实例
    while(T--) {
        solve();  // 调用 solve 函数处理每个身份证号
    }
    return 0;  // 程序正常结束
}

C++

#include <iostream>
#include <algorithm>
#include <cmath>
#include <iomanip>
using namespace std;

void solve() {
    char year[5], month[3], day[3];  // 分别存储年、月、日,多留一个位置用于存储字符串结束符 '\0'
    
    // 跳过前6个字符(身份证号的前6位是地址码)
    cin.ignore(6);
    
    // 读取接下来的4个字符作为年份
    cin.get(year, 5);
    
    // 读取接下来的2个字符作为月份
    cin.get(month, 3);
    
    // 读取接下来的2个字符作为日期
    cin.get(day, 3);
    
    // 跳过最后4个字符(身份证号的后4位是顺序码和校验码)
    cin.ignore(4);
    
    // 跳过换行符,确保下一次读取时不会受到影响
    cin.ignore();
    
    // 输出格式化的日期,格式为 yyyy-mm-dd
    cout << year << "-" << month << "-" << day << endl;
}

int main() {
    int T;  // 测试实例的个数
    cin >> T;  // 读取测试实例的个数
    cin.ignore();  // 清理缓冲区,跳过换行符

    while (T--) {
        solve();  // 处理每个测试实例
    }
    return 0;
}

1088 : 手机短号 (多实例)

题目描述

大家都知道,手机号是一个11位长的数字串,同时,作为学生,还可以申请加入校园网,如果加入成功,你将另外拥有一个短号。假设所有的短号都是是 6+手机号的后5位,比如号码为13512345678的手机,对应的短号就是645678。
现在,如果给你一个11位长的手机号码,你能找出对应的短号吗?

输入

输入数据的第一行是一个N(N <= 200),表示有N组输入数据,接下来的N行每一行为一个11位的手机号码。

输出

输出应包括N行,每行包括一个对应的短号,输出应与输入的顺序一致。

样例输入

2
13512345678
13787600321

样例输出

645678
600321

C

#include<stdio.h>  // 包含标准输入输出库

// 定义一个函数 solve,用于处理输入的手机号码并输出对应的短号
void solve()
{
    int res; // 定义一个整型变量 res,用于存储手机号码的后5位数字
    // 使用 scanf 读取输入
    // %*6d:跳过输入的前6位数字(不存储)
    // %5d:读取接下来的5位数字,存储到变量 res 中
    // %*c:跳过一个字符(通常是换行符)
    scanf("%*6d%5d%*c",&res);
    // 输出结果
    // 6%05d:输出数字时,前面固定为6,后面数字占5位,不足部分用0补齐
    printf("6%05d\n",res);
}

// 主函数
int main()
{
    int T; // 定义一个整型变量 T,用于存储测试用例的数量
    // 读取测试用例数量
    scanf("%d",&T);
    // 清除缓冲区中的换行符
    getchar();
    // 循环处理每个测试用例
    while(T--)
    {
        solve(); // 调用 solve 函数处理每个测试用例
    }
    return 0; // 程序正常结束
}

C++

#include <iostream>  // 包含输入输出流库
using namespace std; // 使用标准命名空间

// 定义一个函数 solve,用于处理输入的手机号码并输出对应的短号
void solve() {
    char res[6]; // 定义一个字符数组 res,用于存储手机号码的后5位数字(加上一个空字符'\0')

    // 使用 cin.ignore(6) 跳过输入的前6位数字
    cin.ignore(6);
    // 使用 cin.get(res, 6) 读取接下来的5位数字,存储到字符数组 res 中
    cin.get(res, 6);
    // 再次使用 cin.ignore() 跳过换行符
    cin.ignore();

    // 输出结果
    // 输出数字6,然后输出字符数组 res 中的内容
    cout << "6" << res << endl;
}

// 主函数
int main() {
    int T;  // 定义一个整型变量 T,用于存储测试实例的个数
    // 读取测试实例的个数
    cin >> T;
    // 清理缓冲区,跳过换行符
    cin.ignore();

    // 循环处理每个测试实例
    while (T--) {
        solve();  // 调用 solve 函数处理每个测试实例
    }
    return 0; // 程序正常结束
}

1089 : 阶乘的最高位

题目描述

输入一个正整数n。输出n!的最高位上的数字。

输入

输入一个正整数n(n不超过1000)。

输出

输出n!的最高位上的数字。

样例输入

1000

样例输出

4

思路:当两个数相乘时,对于特别大的一个数,去掉后几位,不影响两数相乘结果的最高位

C

#include<stdio.h>  // 包含标准输入输出库

int main()
{
    int n;  // 定义一个整型变量 n,用于存储输入的正整数
    // 从用户输入读取正整数 n
    scanf("%d", &n);

    long long mid = 1;  // 定义一个长整型变量 mid,用于存储中间结果,初始值为1

    // 循环计算 n 的阶乘
    for(int i = 1; i <= n; i++)
    {
        // 如果 mid 大于 1e8(即10^8),为了避免溢出,将 mid 除以 10000
        // 这样可以减少 mid 的大小,同时保留其最高位的数字
        if(mid > 1e8)
        {
            mid /= 10000;
        }
        // 将 mid 乘以 i,逐步计算阶乘
        mid *= i;
    }

    // 去掉 mid 的末尾零,直到 mid 只剩下最高位数字
    while(mid > 9)
    {
        mid /= 10;
    }

    // 输出 n! 的最高位数字
    printf("%d\n", mid);

    return 0;  // 程序正常结束
}

C++

#include <iostream>  // 包含标准输入输出流库
using namespace std;  // 使用标准命名空间

int main()
{
    int n;  
    
    scanf("%d", &n);

    long long mid = 1;  // 定义一个长整型变量 mid,用于存储中间结果,初始值为1

    // 循环计算 n 的阶乘
    for(int i = 1; i <= n; i++)
    {
        // 如果 mid 大于 1e8(即10^8),为了避免溢出,将 mid 除以 10000
        // 这样可以减少 mid 的大小,同时保留其最高位数字
        if(mid > 1e8)
        {
            mid /= 10000;
        }
        // 将 mid 乘以 i,逐步计算阶乘
        mid *= i;
    }

    // 去掉 mid 的末尾零,直到 mid 只剩下最高位数字
    while(mid > 9)
    {
        mid /= 10;
    }

    // 输出 n! 的最高位数字
    printf("%d\n", mid);

    return 0;  // 程序正常结束
}

法二C(利用对数知识点)

#include <stdio.h>  // 包含标准输入输出库
#include <math.h>   // 包含数学库,用于调用 log10 和 pow 函数

int main() 
{
    int n;
    scanf("%d", &n); 

    double logSum = 0.0;  // 用于存储对数和

    // 计算 log10(n!)
    for (int i = 1; i <= n; i++)
    {
        logSum += log10(i);  // 累加每个 i 的对数值
    }

    // 提取最高位数字
    double small = logSum - floor(logSum);  // 提取小数部分
    int res = pow(10, small);               // 计算最高位数字

    printf("%d\n", res);  // 输出结果
    return 0;  // 程序正常结束
}

1090 : 整数幂(多实例测试)

题目描述

求A^B的最后三位数表示的整数(1<=A,B<=1000)

输入

n个测试实例,每个实例给出两个正整数A,B

输出

输出A^B的最后三位(没有前导0)

样例输入

2
2 3
12 6

样例输出

8
984

C

#include<stdio.h>

void solve()
{
    int a, b; // 定义变量 a 和 b
    scanf("%d%d", &a, &b); // 输入 a 和 b

    int mid = 1; // 初始化结果变量 mid
    for (int i = 0; i < b; i++) // 循环 b 次
    {
        mid = (mid * a) % 1000; // 每次乘法后直接对 1000 取模
    }

    printf("%d\n", mid); 
}

int main()
{
    int n; // 定义变量 n,表示测试用例数量
    scanf("%d", &n); // 输入测试用例数量
    while (n--) // 对每个测试用例调用 solve 函数
    {
        solve();
    }
    return 0;
}

 

C++(使用快速幂算法)

#include <iostream>
using namespace std;

// 快速幂算法,计算 (base^exp) % mod
int quickPow(int base, int exp, int mod) {
    int result = 1; // 初始化结果为1
    base %= mod; // 先对底数取模,避免溢出

    while (exp > 0) {
        if (exp & 1) { // 如果当前位为1
            result = (result * base) % mod; // 将当前底数乘到结果中
        }
        base = (base * base) % mod; // 底数平方,并取模
        exp >>= 1; // 指数右移一位
    }

    return result;
}

void solve() {
    int a, b;
    cin >> a >> b; // 输入 a 和 b

    int result = quickPow(a, b, 1000); // 计算 A^B % 1000
    cout << result << endl; // 输出结果
}

int main() {
    int n;
    cin >> n; // 输入测试用例数量
    while (n--) {
        solve(); // 处理每个测试用例
    }
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2295041.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【DeepSeek】私有化本地部署图文(Win+Mac)

目录 一、DeepSeek本地部署【Windows】 1、安装Ollama 2、配置环境变量 3、下载模型 4、使用示例 a、直接访问 b、chatbox网页访问 二、DeepSeek本地部署【Mac】 1、安装Ollama 2、配置环境变量 3、下载模型 4、使用示例 5、删除已下载的模型 三、DeepSeek其他 …

深度学习里面的而优化函数 Adam,SGD,动量法,AdaGrad 等 | PyTorch 深度学习实战

前一篇文章&#xff0c;使用线性回归模型逼近目标模型 | PyTorch 深度学习实战 本系列文章 GitHub Repo: https://github.com/hailiang-wang/pytorch-get-started 本篇文章内容来自于 强化学习必修课&#xff1a;引领人工智能新时代【梗直哥瞿炜】 深度学习里面的而优化函数 …

基于Spring Boot的图书个性化推荐系统的设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

【论文阅读】Comment on the Security of “VOSA“

Comment on the Security of Verifiable and Oblivious Secure Aggregation for Privacy-Preserving Federated Learning -- 关于隐私保护联邦中可验证与遗忘的安全聚合的安全性 论文来源摘要Introduction回顾 VOSA 方案对VOSA不可伪造性的攻击对于类型 I 的攻击对于类型 II 的…

3.攻防世界 Confusion1(服务器模板注入SSTI)

题目描述如下 进入题目页面如下 图片是蟒蛇、大象&#xff1f;python、php&#xff1f; 猜测需要代码审计 点击 F12查看源码&#xff0c;有所提示flag 但是也没有其他信息了 猜测本题存在SSTI&#xff08;服务器模板注入&#xff09;漏洞&#xff0c;为验证&#xff0c;构造…

保姆级教程 !SQL Server数据库的备份和还原

使用 SQL Server Management Studio (SSMS) 备份和还原数据库 1、数据库备份 Step 1 打开 SSMS 输入server name 以及用户名和密码连接到你的 SQL Server 实例 Step 2 展开Database,选中你要备份的数据库 Step 3 右击选中的数据库&#xff0c;点击Tasks --> Back …

AlwaysOn 可用性组副本所在服务器以及该副本上数据库的各项状态信息

目录标题 AlwaysOn语句代码解释&#xff1a;1. sys.dm_hadr_database_replica_states 视图字段详细解释及官网链接官网链接字段解释 2. sys.availability_replicas 视图字段详细解释及官网链接官网链接字段解释 查看视图的创建语句方法一&#xff1a;使用 SQL Server Managemen…

ip地址是手机号地址还是手机地址

在数字化生活的浪潮中&#xff0c;IP地址、手机号和手机地址这三个概念如影随形&#xff0c;它们各自承载着网络世界的独特功能&#xff0c;却又因名称和功能的相似性而时常被混淆。尤其是“IP地址”这一术语&#xff0c;经常被错误地与手机号地址或手机地址划上等号。本文旨在…

zephyr devicetree

Syntax and structure — Zephyr Project Documentation Input files There are four types of devicetree input files: sources (.dts) includes (.dtsi) overlays (.overlay) bindings (.yaml) The devicetree files inside the zephyr directory look like this: …

学习笔记:机器学习中的数学原理(一)

1. 集合 集合分为有限集和无限集&#xff1b; 对于有限集&#xff0c;两集合元素数相等即为等势&#xff1b; 对于无限集&#xff0c;两集合元素存在一一映射关系即为等势&#xff1b; 无限集根据是否与正整数集等势分为可数集和不可数集。 2. sigmoid函数&#xff08;也叫…

鼠标滚轮冒泡事件@wheel.stop

我有一个页面,是在画布上的组件,但是组件中有一个table,table中数据多了,就会出现滚动条,正常情况下,滚动条用鼠标滚轮就可以滑动,但是这个table是在画布上,滚动滚轮会让画布缩放 在table外层的div上加上 wheel.stop,就生效了 wheel.stop 用途&#xff1a;这个修饰符用于处理鼠…

代码随想录算法【Day38】

Day38 322. 零钱兑换 思路 完全背包 代码 class Solution { public:int coinChange(vector<int>& coins, int amount) {vector<int> dp(amount 1, INT_MAX);dp[0] 0;for (int i 0; i < coins.size(); i) { // 遍历物品for (int j coins[i]; j <…

51单片机之冯·诺依曼结构

一、概述 8051系列单片机将作为控制应用最基本的内容集成在一个硅片上&#xff0c;其内部结构如图4-1所示。作为单一芯片的计算机&#xff0c;它的内部结构与一台计算机的主机非常相似。其中微处理器相当于计算机中的CPU&#xff0c;由运算器和控制器两个部分构成&#xff1b;…

02.07 TCP服务器与客户端的搭建

一.思维导图 二.使用动态协议包实现服务器与客户端 1. 协议包的结构定义 首先&#xff0c;是协议包的结构定义。在两段代码中&#xff0c;pack_t结构体都被用来表示协议包&#xff1a; typedef struct Pack {int size; // 记录整个协议包的实际大小enum Type type; …

【CubeMX+STM32】SD卡 文件系统读写 FatFs+SDIO+DMA

本篇&#xff0c;将使用CubeMXKeil&#xff0c;创建一个SD卡的 FatFSSDIODMA 文件系统读写工程。 目录 一、简述 二、CubeMX 配置 FatFSSDIO DMA 三、Keil 编辑代码 四、实验效果 实现效果&#xff0c;如下图&#xff1a; 一、简述 上两篇&#xff0c;已循序渐进讲解了SD、…

51单片机之使用Keil uVision5创建工程以及使用stc-isp进行程序烧录步骤

一、Keil uVision5创建工程步骤 1.点击项目&#xff0c;新建 2.新建目录 3.选择目标机器&#xff0c;直接搜索at89c52选择&#xff0c;然后点击OK 4.是否添加起吊文件&#xff0c;一般选择否 5.再新建的项目工程中添加文件 6.选择C文件 7.在C文件中右键&#xff0c;添加…

aws(学习笔记第二十七课) 使用aws API Gateway+lambda体验REST API

aws(学习笔记第二十七课) 使用aws API Gatewaylambda体验REST API 学习内容&#xff1a; 使用aws API Gatewaylambda 1. 使用aws API Gatewaylambda 作成概要 使用api gateway定义REST API&#xff0c;之后再接收到了http request之后&#xff0c;redirect到lambda进行执行。…

5 前端系统开发:Vue2、Vue3框架(上):Vue入门式开发和Ajax技术

文章目录 前言一、Vue框架&#xff08;简化DOM操作的一个前端框架&#xff09;&#xff1a;基础入门1 Vue基本概念2 快速入门&#xff1a;创建Vue实例&#xff0c;初始化渲染&#xff08;1&#xff09;创建一个入门Vue实例&#xff08;2&#xff09;插值表达式&#xff1a;{{表…

快速在wsl上部署学习使用c++轻量化服务器-学习笔记

知乎上推荐的Tinywebserver这个服务器&#xff0c;快速部署搭建&#xff0c;学习c服务器开发 仓库地址 githubhttps://link.zhihu.com/?targethttps%3A//github.com/qinguoyi/TinyWebServerhttps://link.zhihu.com/?targethttps%3A//github.com/qinguoyi/TinyWebServer 在…

2025年Android NDK超全版本下载地址

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分…