用递归计算数字的位数

count the digits of a number with recursion

本文关键字:数字 递归计算      更新时间:2023-10-16
#include<iostream>
using namespace std;
bool recursion(int numb, int k, int br)
{
    if(br==1) return (numb==k);
    return k==(numb%10) || recursion(numb/10,k,br-1);
}
int main(){
    int num,n;
    cin>>num;
    n=num;
    int p;
    cin>>p;
    int br=1;
    while(n>10){
        n=n/10;
        br++;
    }
    cout<<br<<endl;
    cout<<recursion(num,p,br);
    return 0;
}

这是计算数字数字的整个程序,但它不适用于超过 10 位的数字。有人知道为什么吗?

首先,您的递归程序不计算数字中的数字,它会检查特定数字k是否存在于数字numb的最后 br 位数字中。

它不适用于超过十位的数字,因为系统上int可以表示的最大数字有十位数字。在 32 位系统上,它是 2,147,483,647 .

要使其适用于更多数字,请使用更大的数据类型 - 例如 long longuint64_t

在 32 位机器上,整数的长度为 32 位。您可以获得的最大有符号整数是 2^31 - 1 = 2147483647 它有 10 位数字。你必须使用字符串来允许任意大的数字。