【NOI-题解】1605. 求一个两位数的和1606. 求一个两位数倒序的结果1027 - 求任意三位数的和1028 - 个位和百位对调后输出1390四位整数各个位的和1109 - 加密四位数

该博客聚焦于C++基本运算中的拆位求解问题,详细讲解了多个不同位数整数的相关题目,如求两位数个位和十位的和、三位数各数位数字之和等。通过分析问题、定义变量、输入数据、数据计算和输出结果等步骤给出解题思路,并展示了完整代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、前言

本章节主要对基本运算中的拆位求解的题目进行讲解。

二、问题

问题:1605. 求一个两位数的个位和十位的和

类型:基本运算、拆位求解。


题目描述:

从键盘读入一个两位的整数 n ,请求出这个两位整数个位和十位的和是多少?

输入:

一个两位的整数 n 。

输出:

一个整数,代表 n 个位和十位的和。

样例:
输入:

24

输出:

6

在这里插入图片描述


1.分析问题

  1. 已知:一个两位的整数 n。
  2. 未知:这个两位整数个位和十位的和是多少?
  3. 关系:拆位求解 。

2.定义变量

  • int n:用于存储输入的两位整数。
  • int sum:用于存储个位和十位数字之和。
	//二、数据定义 
	int n,sum; 

3.输入数据

  • 从标准输入(键盘)接收用户输入的两位整数,将其赋值给变量n。
	//三、数据输入 
	cin>>n;

4.数据计算

利用整数除法(/)和取模运算(%)进行拆位求解:

  • n / 10:整除运算,结果为n的十位数字(不带个位)。
  • n % 10:取模运算,结果为n除以10的余数,即n的个位数字。
	//四、数据计算 
	sum=n/10+n%10;

5.输出结果

  • 将计算得到的sum值输出到标准输出(屏幕)。
	//五、输出结果 
	cout<<sum;

完整代码如下:

#include <bits/stdc++.h> 
using namespace std;

int main() {
    // 一、分析问题
    // 已知:一个两位的整数 n。
    // 未知:这个两位整数个位和十位的和是多少?
    // 关系:拆位求解

    // 二、数据定义
    // 定义变量 n 用于存储输入的两位整数
    // 定义变量 sum 用于存储个位和十位数字之和
    int n, sum;

    // 三、数据输入
    // 从标准输入(键盘)接收用户输入的两位整数,并将其赋值给变量 n
    cin >> n;

    // 四、数据计算
    // 利用整数除法(/)获取 n 的十位数字(不带个位)
    // 利用取模运算(%)获取 n 的个位数字
    // 将十位数字与个位数字相加,得到它们的和,并将结果赋值给变量 sum
    sum = n / 10 + n % 10;

    // 五、输出结果
    // 将计算得到的个位和十位数字之和(即变量 sum 的值)输出到标准输出(屏幕)
    cout << sum;

    // 六、程序结束
    // 添加 return 0; 语句,表示主函数正常结束并返回整数0
    return 0;
}

问题:1606. 求一个两位数倒序的结果

类型:基本运算、拆位求解


题目描述:

请输出一个两位的整数 n,倒过来的数,也就是输出这个两位数个位和十位颠倒的结果。
比如:整数 23 倒过来是 32,整数 18 倒过来是 81 ,整数 20 倒过来是 2。

输入:

两位整数 n。

输出:

n 倒过来的整数。

样例:

输入:

16

输出:

61

在这里插入图片描述


1.分析问题

  1. 已知:两位整数 n。
  2. 未知:n 倒过来的整数。
  3. 关系:拆位求解 。

2.定义变量

  • int n:用于存储输入的两位整数。
  • int result:用于存储倒过来的整数。
	//二、数据定义 
	int n,result; 

3.输入数据

  • 从标准输入(键盘)接收用户输入的两位整数,将其赋值给变量n。
	//三、数据输入 
	cin>>n;

4.数据计算

利用整数除法(/)和取模运算(%)进行拆位求解:

  • 利用整数除法(/)获取 n 的十位数字(不带个位),并乘以10得到其在新整数中的位置。
  • 利用取模运算(%)获取 n 的个位数字。
  • 将十位数字与个位数字相加,得到颠倒后的整数,并将结果赋值给变量 result。

    result = (n % 10) * 10 + (n / 10);

5.输出结果

  • 将计算得到的倒过来的整数(即变量result的值)输出到标准输出(屏幕)。
	//五、输出结果 
	cout<<result;

完整代码如下:

#include <iostream>
using namespace std;

int main() {
    // 一、分析问题
    // 已知:一个两位的整数 n。
    // 未知:这个两位整数颠倒后的整数是多少?
    // 关系:拆位求解

    // 二、数据定义
    // 定义变量 n 用于存储输入的两位整数
    // 定义变量 result 用于存储颠倒后的整数
    int n, result;

    // 三、数据输入
    // 从标准输入(键盘)接收用户输入的两位整数,并将其赋值给变量 n
    cin >> n;

    // 四、数据计算
    // 利用整数除法(/)获取 n 的十位数字(不带个位),并乘以10得到其在新整数中的位置
    // 利用取模运算(%)获取 n 的个位数字
    // 将十位数字与个位数字相加,得到颠倒后的整数,并将结果赋值给变量 result
    result = (n % 10) * 10 + (n / 10);

    // 五、输出结果
    // 将计算得到的颠倒后的整数(即变量 result 的值)输出到标准输出(屏幕)
    cout << result;

    // 六、程序结束
    // 添加 return 0; 语句,表示主函数正常结束并返回整数0
    return 0;
}

问题:1027 - 求任意三位数各个数位上数字的和

类型:基础问题、拆位求解


题目描述:

对于一个任意的三位自然数 x ,编程计算其各个数位上的数字之和 S 。

输入:

输入一行,只有一个整数 x(100≤x≤999) 。

输出:

输出只有一行,包括 1 个整数。

样例:

输入:

123

输出:

6

在这里插入图片描述


1.分析问题

  1. 已知:x的值。
  2. 未知:x各数位相加后的和s。
  3. 关系:拆位求解

2.定义变量

定义了一个整型变量x用于存储输入的三位整数,定义了另一个整型变量s用于存储x各数位相加后的和。

	//2.定义变量 
	int x,s;

3.输入数据
通过cin从标准输入设备(通常是键盘)读取一个整数,并将其赋值给变量x。

	//3.输入数据 
	cin>>x;

4.数据计算

  1. 先通过取模运算得到x的个位数(ge),即int ge=x%10;

  2. 然后通过连续两次除以10并取模得到x的十位数(shi),即int
    shi=x/10%10;

  3. 再通过除以100并向下取整得到x的百位数(bai),即int bai=x/100;

  4. 计算这三个数位上的数字之和并将结果赋值给变量s,即s=ge+shi+bai;

	//4.数据计算 
	int ge=x%10;
	int shi=x/10%10;
	int bai=x/100;

5.输出结果

  1. 使用cout将计算出的各数位之和(s)输出到标准输出设备(通常是显示器)。
  2. 返回0,表示程序正常结束。
	//5.输出数据
	cout<<s;

	return 0;	

完整代码如下:

#include<iostream> // 引入C++标准输入输出流库,以便进行输入输出操作
using namespace std; // 使用标准命名空间std,简化代码中对库函数的调用

int main(){ // 程序主入口函数
    // 1. 分析问题:已知一个整数x,要求计算其各个数位上的数字之和。
    
    // 2. 定义变量 
    int x, s; // 定义整型变量x用于存储输入的三位整数,定义整型变量s用于存储各数位相加后的和
    
    // 3. 输入数据 
    cin>>x; // 从标准输入(如键盘)读取一个整数并将其赋值给变量x
    
    // 4. 数据计算 
    int ge = x % 10; // 计算x的个位数,通过取模运算获取
    int shi = x / 10 % 10; // 计算x的十位数,通过连续除以10并取模获取
    int bai = x / 100; // 计算x的百位数,直接除以100并向下取整获取
    
    s = ge + shi + bai; // 将各数位的数值相加求和,并将结果存入变量s
    
    // 5. 输出数据
    cout<<s; // 将计算得到的各数位之和输出到标准输出(如显示器)

    return 0; // 主函数返回0,表示程序正常结束
} // 结束main函数

问题:1028 - 输入一个三位数,把个位和百位对调后输出

类型:基础问题


题目描述:

输入一个三位自然数,然后把这个数的百位数与个位数对调,输出对调后的数。

输入:

输入一行,只有一个整数 x(100≤x≤999) 。

输出:

输出只有一行,包括 1 个整数。

样例:

输入:

123

输出:

321

输入:

120

输出:

21

在这里插入图片描述


1.分析问题

  1. 已知:x的值。
  2. 未知:对调后的数。
  3. 关系:拆位求解

2.定义变量

  • 定义了一个整型变量x用于存储输入的三位整数。
	int x,g,s,b;

3.输入数据

  • 通过cin从标准输入设备(通常是键盘)读取一个整数,并将其赋值给变量x。
	cin>>x;

4.数据计算

  1. 先通过取模运算得到x的个位数(ge),即int ge=x%10;
  2. 然后通过连续两次除以10并取模得到x的十位数(shi),即int shi=x/10%10;
  3. 再通过除以100并向下取整得到x的百位数(bai),即int bai=x/100;
  4. 将得到的各个数位上的数字按照新的顺序(原百位->个位,原十位->十位,原个位->百位)重新组合成一个新的整数,即g100 + s10 + b。
	g=x%10;
	s=x/10%10;
	b=x/100%10;

5.输出结果

  1. 使用cout将重新组合后的整数输出到显示器。
  2. 主函数返回0,表示程序正常结束。
	cout<<g*100+s*10+b;
	return 0;	

完整代码如下:

#include<iostream> // 引入C++标准输入输出流库,用于进行输入输出操作


using namespace std; // 使用标准命名空间std,简化对标准库函数的调用

int main(){ // 程序主入口函数
    // 定义变量 
    int x, g, s, b; // 定义整型变量x用于存储输入的三位整数,g用于存储个位数,s用于存储十位数,b用于存储百位数
    
    // 输入数据
    cin>>x; // 从标准输入(如键盘)读取一个三位整数并将其赋值给变量x
    
    // 数据计算与处理
    g = x % 10; // 计算并获取x的个位数
    s = x / 10 % 10; // 计算并获取x的十位数
    b = x / 100 % 10; // 计算并获取x的百位数

    // 将提取出的各个数位上的数字重新排列(将原百位、十位、个位分别调整为新数的个位、十位、百位)
    // 这里通过乘以10的相应次方来实现位置调整
    int rearranged_number = g * 100 + s * 10 + b;
    
    // 输出数据
    cout<<rearranged_number; // 输出重新排列后的整数到标准输出(如显示器)

    return 0; // 主函数返回0,表示程序正常结束
} // 结束main函数

问题:1390-请从键盘读入一个四位整数,求这个四位整数各个位的和是多少?

类型:基础问题、拆位求解。


题目描述:

请从键盘读入一个四位整数,求这个四位整数各个位的和是多少?

输入:

一个四位整数 n 。

输出:

这个四位数各个位的和。

样例:

输入:

3456

输出:

18

在这里插入图片描述


1.分析问题

  1. 已知:一个四位整数 n 。
  2. 未知:这个四位数各个位的和。
  3. 关系:拆位求解

2.定义变量

  • 定义整型变量x用于存储输入的四位整数,g用于存储个位数,s用于存储十位数,b用于存储百位数,q用于存储千位数。
	int x,g,s,b,q;

3.输入数据

  • 通过cin从键盘获取用户输入的四位整数,并将其赋值给变量x。
	cin>>x;

4.数据计算

  • 计算并分别提取x的个位、十位、百位和千位数,方法是利用取模和除法运算。
	g=x%10;
	s=x/10%10;
	b=x/100%10;
	q=x/1000%10;

5.输出结果

  • 使用cout将各数位之和输出到显示器。
  • 主函数返回0,表示程序正常结束。
	cout<<g+s+b+q;
	return 0;	

完整代码如下:

#include<iostream> // 引入C++标准输入输出流库,提供cin和cout等功能

using namespace std; // 使用标准命名空间std,简化对库函数的调用

int main() { // 程序主入口函数
    // 定义变量 
    int x, g, s, b, q; // 定义整型变量x用于存储输入的四位整数,g、s、b、q分别用于存储个位、十位、百位和千位数字
    
    // 输入数据
    cin>>x; // 从标准输入(如键盘)读取一个四位整数并将其赋值给变量x
    
    // 数据计算与提取各个数位上的数字
    g = x % 10; // 计算并获取x的个位数
    s = (x / 10) % 10; // 计算并获取x的十位数
    b = (x / 100) % 10; // 计算并获取x的百位数
    q = x / 1000; // 计算并获取x的千位数(这里无需再进行取模运算,因为已确保输入的是四位数)
    
    // 各数位数字求和
    int sum_of_digits = g + s + b + q;
    
    // 输出数据
    cout<<sum_of_digits; // 输出各数位之和到标准输出(如显示器)

    return 0; // 主函数返回0,表示程序正常结束
} // 结束main函数

问题:1109 - 加密四位数

类型:基础问题、拆位求解


题目描述:

某军事单位用 4 位整数来传递信息,传递之前要求先对这个 4 位数进行加密。加密的方式是每一位都先加上 5 然后对 10 取余数,再将得到的新数颠倒过来。
例如:原数是 1379 ,那么每位加 5 对 10 取余数的结果为 6824 ,然后颠倒该数,得到新数:4286。
再比如:原数是 2570,那么每位加 5 对 10 取余数的结果为 7025 ,然后颠倒该数,得到新数: 5207 。
请根据加密要求,写出加密算法!

输入:

加密前的 4 位数。

输出:

加密后的结果。

样例:

输入:

1379

输出:

4286

在这里插入图片描述


1.分析问题

  1. 已知:加密前的 4 位数。
  2. 未知:加密后的结果。
  3. 关系:拆位求解再做运算。

2.定义变量

	int x,g,s,b,q;

3.输入数据

  • 通过cin从键盘获取用户输入的整数,并将其赋值给变量x。
	cin>>x;

4.数据计算

  • 使用取模运算符 % 和除法运算符 / 来分离出原四位整数 x 的各个数位。例如,g = x % 10; 得到个位数,s = (x / 10) % 10; 得到十位数,以此类推得到百位和千位数。
	g=x%10;
	s=x/10%10;
	b=x/100%10;
	q=x/1000%10;
  • 对于每一位数字,先加上5,然后对其结果取模10,这样可以确保每位数字仍保持在0到9之间。例如,g=(g+5)%10; 更新了经过变换后的个位数。
	g=(g+5)%10;
	s=(s+5)%10;
	b=(b+5)%10;
	q=(q+5)%10;

5.输出结果

	cout<<g*1000+s*100+b*10+q;
	return 0;

完整代码如下:

// 引入iostream库,以便进行输入输出操作
#include<iostream>

// 使用标准命名空间std,简化对库函数的调用
using namespace std;

int main() {
    // 定义变量:x用于存储输入的四位整数,g、s、b、q分别用于存储个位、十位、百位和千位数字
    int x, g, s, b, q;

    // 输入数据:从用户通过键盘输入一个四位整数,并将其赋值给变量x
    cin>>x;

    // 计算并提取各个数位上的数字
    g = x % 10;          // 获取x的个位数
    s = (x / 10) % 10;   // 获取x的十位数
    b = (x / 100) % 10;  // 获取x的百位数
    q = x / 1000;        // 获取x的千位数(这里无需取模运算,因为四位数的千位就是除以1000的商)

    // 对各数位数字加上5后取模10,确保结果仍在0-9范围内
    g = (g + 5) % 10;
    s = (s + 5) % 10;
    b = (b + 5) % 10;
    q = (q + 5) % 10;




    // 输出数据:将重新组合后的整数输出到显示器
    cout<<g * 1000 + s * 100 + b * 10 + q;

    // 主函数返回0,表示程序正常结束
    return 0;
}

三、感谢

如若本文对您的学习或工作有所启发和帮助,恳请您给予宝贵的支持——轻轻一点,为文章点赞;若觉得内容值得分享给更多朋友,欢迎转发扩散;若认为此篇内容具有长期参考价值,敬请收藏以便随时查阅。

每一次您的点赞、分享与收藏,都是对我持续创作和分享的热情鼓励,也是推动我不断提供更多高质量内容的动力源泉。期待我们在下一篇文章中再次相遇,共同攀登知识的高峰!

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

明月别枝惊鹊丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值