给定数字N作为输入。目标是计算数字1到N之间的总位数。1到9个数字每个需要1数字,11到99个每个数字需要2个数字,100到999个每个数字需要3个数字,依此类推。
让我们用例子来理解
输入-N = 11
输出-从1到N的总位数计数是:13
说明-数字1到9每个都有1位数字:9个数字10、11每个都有2位数字。4位数。总位数= 9 + 4 = 13。
输入-N = 999
输出-从1到N的总位数计数是:2889
说明 -数字1至9各自具有1位数字:9数字10至99各自具有2位数字。:180位数 100至999各有3位数字:2700位数字总位数= 2700 + 180 + 9 = 2889位数字
我们将使用两种方法。第一种使用递归函数来计算数字num中的数字的朴素方法。将传递的num转换为字符串。字符串的长度是num中的数字。对每个数字进行递归绕过当前num-1的操作。
将数字作为正整数。
函数total_digits(int num)接受num并返回1到num之间的数字。
要计算num中的数字,请将num转换为字符串。(to_string(num))。
字符串的长度是num中的数字。
如果num为1,则返回1。其他长度小于num的其他返回长度+ total_digits(num-1)。
最后,我们将得到总位数。
在这种方法中,我们将使用以下逻辑,即每个数字最多N个。我们将遍历10、100、1000个最大N。对于每个10i,数字的个数是(num-i + 1)。
将数字作为正整数。
函数total_digits(int num)接受num并返回1到num之间的数字。
最初将总计数设为0。
将i = 1遍历到i <= num,在每次迭代中将i递增10,然后加上num-i + 1进行计数。
结果在for循环的末尾返回计数。
#include <bits/stdc++.h> using namespace std; int total_digits(int num){ string str = to_string(num); int length = str.length(); if (num == 1){ return 1; } return length + total_digits(num - 1); } int main(){ int num = 20; cout<<"Count of total number of digits from 1 to n are: "<<total_digits(num); return 0; }
输出结果
如果我们运行上面的代码,它将生成以下输出-
Count of total number of digits from 1 to n are: 31
#include <bits/stdc++.h> using namespace std; int total_digits(int num){ int count = 0; for(int i = 1; i <= num; i *= 10){ count = count + (num - i + 1); } return count; } int main(){ int num = 20; cout<<"Count of total number of digits from 1 to n are: "<<total_digits(num); return 0; }
输出结果
如果我们运行上面的代码,它将生成以下输出-
Count of total number of digits from 1 to n are: 31