RT:
例如 N=5, 含有1的数字为:1,总共有1个1;
N=11, 含有1的数字为:1,10,11,总共有4个1;
算法如下:(并测试两种算法的效率)
import java.util.Calendar;
import java.util.Scanner;
public class AnalyseNum {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int N = scanner.nextInt();
long beginS = Calendar.getInstance().getTimeInMillis();
System.out.println("f("+ N +") = " + AnalyseNum(N));
System.out.println("for--efficency:" + (Calendar.getInstance().getTimeInMillis() - beginS));
beginS = Calendar.getInstance().getTimeInMillis();
System.out.println("f("+ N +") = " + AnalyseNumEfficiency(N));
System.out.println("algorithm--efficency:" + (Calendar.getInstance().getTimeInMillis() - beginS));
}
public static int AnalyseNum(int num)
{
int count = 0;
for(int i=1; i<=num; i++)
{
/*int numdiv = i/10;
if(i%10 ==1)
count++;
while(numdiv != 0)
{
int nummod = numdiv%10;
if(nummod == 1)
count++;
numdiv = numdiv/10;
}*/
int isNum = 0;
int curNum = i;
while(curNum != 0)
{
isNum += (curNum % 10 == 1)? 1 : 0;
curNum /= 10;
}
count += isNum;
}
return count;
}
public static int AnalyseNumEfficiency(int num)
{
int count = 0;
int factor = 1;
int lowerNum = 0;
int curNum = 0;
int higherNum = 0;
while(num / factor != 0)
{
lowerNum =num - (num/factor)*factor;
curNum = (num/factor)%10;
higherNum = num/(factor*10);
switch (curNum) {
case 0:
count += higherNum*factor;
break;
case 1:
count += higherNum*factor + lowerNum + 1;
break;
default:
count += (higherNum + 1)*factor;
break;
}
factor *= 10;
}
return count;
}
}
测试后,发现后面一种算法的高于前者N倍~~~~~
分享到:
相关推荐
在本题目中,我们需要编写一个C语言程序,用于计算从1到给定正整数N之间所有整数中数字"1"出现的总次数。这是一个典型的字符串处理和数学计算问题,涉及到了数字转换、字符串遍历以及计数算法。下面我们将深入探讨这...
从第二行开始,每一行包含一个正整数,代表这组测试用例中的数字\( m \)。对于每组测试用例,都需要输出数字\( m \)的不同划分的数量。 #### 示例输入 ``` 2 5 6 ``` 这里包含两组测试用例,分别是要对数字5和6进行...
整数因子分解问题 大于1 的正整数n可以分解为:n=x1*x2*…*xm。 例如,当n=12 时,共有8 种...第一行有1 个正整数n (1≤n≤2000000000)。 Output 将计算出的不同的分解式数输出 Sample Input 12 Sample Output 8
假设n为一个给定的正整数,我们需要证明存在n个连续的正整数,这n个正整数都是合数。 **构造方法**:考虑以下数列: \[ (n+1)!+2, (n+1)!+3, \ldots, (n+1)!+(n+1) \] 其中,(n+1)! 表示(n+1)的阶乘,即\( (n+1)!...
给定一个整数n,求出所有连续的且和为n正整数。比如对于整数27,结果为2~7、8~10、13和14,因为这些数之间的整数的和都是27。注意:并不是所有的整数都有结果,例如不存在连续的整数和为16。为了提高计算的效率,...
有一个整数n,写一个函数f(n),返回0到n之间出现的 "1 "的个数。比如f(13)=6,现在f(1)=1,问下一个最大的f(n)=n的n是什么?
计算机编程题目:判断输入的任何一个正整数n,是否等于某个连续正整数序列之和。(要求多次输入直到碰到输入的数字小于1时程序退出。) C++语言编写的代码
C语言程序设计-求给定正整数n以内的素数之积;(n).c
对于给定的n位正整数a 和正整数k,设计一个算法找出剩下数字组成的新数 最小的删数方案。 «编程任务: 对于给定的正整数a,编程计算删去k个数字后得到的最小数。 Input 由文件input.txt提供输入数据。文件的第1...
求满足1+2+3+…n的最大正整数n的MATLAB程序
分析:求解k个数的不同组合,我们可以用一维数组a[0]~a[k-1]来保存其中的一个结果,因为组合...所以a[k-1]即组合中的最后一个数,只能为k~n 令i=a[k-1] 则 i>=k && i<=n 完整代码请参考我的博客文章,这里只是核心部分
对于给定的正整数的集合S={x1,x2,...,xn}和正整数c,编程计算S 的一个子集 S1,使得x∈S1,∑x=c. Input 由文件input.txt 提供输入数据。文件第1 行有2 个正整数n 和c,n 表示S 的大小,c 是子集和的目标值。接...
在这个程序中,`isPrime`函数用于判断一个数是否为素数,`printMersenneNumbers`函数则遍历从2到n的所有可能的p值,计算对应的梅森数并打印出来。用户可以通过输入n值来更改查找范围。 运行这个程序时,确保你有一...
在计算机科学和数学中,计算从n个正整数中选择k个数的不同组合数是一项基本的任务,这涉及到组合数学中的组合(Combination)概念。组合是指从一个集合中不考虑顺序取出k个元素的方法数,它与排列(Permutation)...
这个过程可以不断重复,直到其中一个数为0,此时另一个非零数即为所求的最大公约数。给定代码中`gcd`函数正是采用了这种递归形式的欧几里得算法。 ### 知识点三:循环版欧几里得算法 除了递归版本,欧几里得算法还...
在本题目中,我们需要使用C语言编写一个程序,该程序能接收用户输入的N个正整数,并统计其中奇数和偶数的数量。这是一道基础的编程练习,旨在帮助学习者掌握C语言的基本语法、循环结构以及条件判断。下面我们将详细...
约瑟夫环2、 约瑟夫(Josephus)环问题:编号为1,2,3,…,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数的上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时...
素数又叫质数,质数是指在大于1的自然数中,除了1和它本身以外,不能被其他自然数整除的数。 问题: 输入一个整数n,输出1~n中的素数,里有详细解释,有问题也欢迎留言!谢谢支持啦~
这个问题的核心是找到所有可能的方式,将一个给定的正整数N拆分为一系列非负整数之和,且每个部分都是正整数。在计算机科学中,这类问题通常被归类为回溯或动态规划问题。 描述中的“补充2019-07-18的源码”表明这...
根据给定文件的信息,我们可以提炼出以下相关的IT知识点: ...这段代码实现了将一个十进制正整数N转换为d进制数的功能,其中d的范围为2到9。通过使用循环结构和数组,能够有效地完成进制转换任务。