夢の中の彼女 2024-04-20 20:20 采纳率: 40%
浏览 5
已结题

数根怎么求 他说n会非常大

给定一个正整数 n,若 n 在十进制下的各位数字之和小于10,则这个和是 n 的数根。否则,继续求这个和在十进制下的各位数字之和,直到结果小于 10 为止,定义最后的结果为 n 的数根。

例如,456 的数根为 6,因为 4+5+6=15,继续分解得 1+5=6。给定 n,请输出它的数根。注意,有一部分 n 非常大。

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-20 20:20
    关注

    引自免费微信小程序:皆我百晓生

    为了计算任意大的正整数的数根,我们可以编写一个递归函数,当数字之和小于10时返回当前的和,否则继续进行求和。这里是一个详细的C++实现:

    #include <iostream>
    #include <string>
    
    int sumDigits(const std::string &num) {
        int sum = 0;
        for (char digit : num) {
            sum += digit - '0';
        }
        return sum;
    }
    
    int findRoot(int n) {
        if (n < 10) {
            return n;
        } else {
            std::string strN = std::to_string(n);
            return findRoot(sumDigits(strN));
        }
    }
    
    int main() {
        int n;
        std::cout << "Enter a large number: ";
        std::cin >> n;
    
        // 对于非常大的数字,可能需要考虑溢出问题,这里我们仅处理能表示的整数范围内的数值。
        if (n > INT_MAX / 10) {
            std::cerr << "Number is too large to compute the root." << std::endl;
            return 1;
        }
    
        int root = findRoot(n);
        std::cout << "The root of " << n << " is " << root << std::endl;
    
        return 0;
    }
    

    这段代码首先将输入的整数转换成字符串,然后逐个字符地加总得到数字之和。如果和小于10,就返回这个和作为数根;否则,继续对和执行相同的操作,直到找到数根。

    注意:对于非常大的数字(超过INT_MAX/10),可能会导致整型变量溢出。在实际应用中,你可能需要使用更大容量的数据类型,比如long long,并且相应地调整溢出检查条件。同时,对于非常大的数字,计算过程可能会比较耗时。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 4月28日
  • 已采纳回答 4月20日
  • 创建了问题 4月20日

悬赏问题

  • ¥15 下载ctorch报错,求解
  • ¥15 如何入门学习c语言,单片机
  • ¥15 idea 编辑语言的选择
  • ¥15 Windows下部署Asmjit
  • ¥15 请问双层规划模型的上下层目标函数不一致,是如何保证迭代收敛性的
  • ¥15 微信小程序 前端页面内容搜索
  • ¥15 cpu是如何判断当前指令已经执行完毕,然后去执行下条指令的
  • ¥15 安装visual studio2022时visualstudiosetup启动不了,闪退。问题代号0x0和0x1389
  • ¥30 java spring boot2.5.3版本websocket连不上
  • ¥15 angular js调外部链接查看pdf