IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 一个整数n,对它的每一位d,用d+1替换d的编程题 -> 正文阅读

[C++知识库]一个整数n,对它的每一位d,用d+1替换d的编程题

题目

在Temmie的世界中,有一种特殊的运算X,它的运算方式如下:

对于一个整数n,对它的每一位d,用d+1替换d。

例如,对于193,它的每一位+1后的结果为2,10,4。所以,193的X运算结果为2104。

现在小Temmie想要把整数n进行m次X运算后的结果写在纸上,可是他不知道这个结果需要用多少张纸,所以,他来拜托你计算n进行m次运算后结果的位数。

因为结果可能超过整形范围,所以你只需要告诉他结果模 10^9+7 的余数即可。

输入格式

第一行一个数字t,代表有t个测试用例。(1<=t<=2*10^5)

接下来t行,每行两个数字,分别代表n和m。(1<=n<=10^9, 1<=m<=2*10^5)

输出格式

t行,每行1个整数,表示对n进行m次运算X后得到的结果的位数模10^9+7的余数。

样例输入

5

1912 1

5 6

999 1

88 2

12 100

样例输出

5

2

6

4

2115

样例解释

对于第一个样例,1912进行一次X运算后得到的结果为21023,长度为5位。

对于第二个样例,5进行6次X运算后得到的结果为21,长度为2位。

对于第三个样例,999进行1次X运算后得到的结果为101010,长度为6。

对于第四个样例,88进行2次X运算后的结果为1010,长度为4。

解析

  1. 使用输入对象 Scanner sc = new Scanner(System.in),进行输入值。

  2. 先输入 t 行的值,然后以此为数组的大小创建 n 和 m ,然后进行输入值。

    注意:需要对 t、m 和 n 进行界限判断。

  3. 对传进来的整数进行 X 运算,即对每一位进行加1

    3.1 利用String中的分割函数可以轻松的取出数字每位上的数

    3.2 然后将每位上的数加 1 后,进行长度判断

  4. 因为是对传进来的整数不止一次的进行 X 运算,故采用 递归的方法进行 m 次的 X 运算

    注意:这里进行递归传进来的 n 值有可能超过界限范围,故需要判断抛出。

  5. 输出对 n 值的 m 次 X 运算后返回数值的长度

代码实现

import java.util.Scanner;

/**
 * @author 江七
 * @version 1.0
 * @date 2021/9/13 16:43
 */
public class Temmie {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int t = sc.nextInt();//代表有t个测试用例
        if (t < 1 || t > 2 * 1e5) { //
            System.out.println("你输入t的值不合法,请重新输入合法的值(1<=t<=2*10^5):");
            t = sc.nextInt();
        }
        int[] n = new int[t];
        int[] m = new int[t];
        for (int i = 0; i < t; i++) {//1<=n<=10^9, 1<=m<=2*10^5
            n[i] = sc.nextInt();
            m[i] = sc.nextInt();
            if (n[i] < 1 || n[i] > 1e9 || m[i] < 1 || m[i] > 2 * 1e5) {
                System.out.println("你输入的值不合法,请重新输入合法的值 n m(1<=n<=10^9, 1<=m<=2*10^5):");
                n[i] = sc.nextInt();
                m[i] = sc.nextInt();
            }
        }
        for (int i = 0; i <t ; i++) {
            //System.out.println("n="+n[i]+",m="+m[i]+"经运算后的长度为:"+getlength(t,n,m)[i]);
             System.out.println(getlength(t,n,m)[i]);
        }

    }

    public static int[] getlength(int t, int[] n, int[] m) {
        int[] length = new int[t];
        int[] num=new int[t];
        for (int i = 0; i < t; i++) {
          num[i] =getOneLength(n[i],m[i]);
          length[i] = String.valueOf(num[i]).length();
        }
        return length;
    }

    public static int getOneLength(int n, int m) {
        int num=0;//返回的结果
        String[] strings = String.valueOf(n).split("");
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < strings.length; i++) {
            int x = Integer.parseInt(strings[i]);//将字符串转化成int
            if (x == 9) {
                sb.append(1).append(0);
            } else {
                sb.append(x + 1);
            }
        }
        if (sb.length()>10){
            throw new NumberFormatException("n="+sb.toString()+"的数值过大,无法求解");
        }
        num = Integer.parseInt(sb.toString().trim());//新的参数
        m--;
        if (m>0){//递归条件
            num=getOneLength(num, m);
        }
        return num;
    }
}

结果截图

image-20210913222613661

数值异常截图

image-20210913222643625

12 100 这组数因为递归后,传进的n值超过界限,故抛出异常

这组数因时间和知识有限,没有处理好,若您有好的方法处理,请评论区告知,谢谢

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-09-14 13:08:38  更:2021-09-14 13:09:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 21:51:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码