Java 有多少个基数b使得数字的基数b表示以1开头?

Java 有多少个基数b使得数字的基数b表示以1开头?,java,for-loop,while-loop,integer,long-integer,Java,For Loop,While Loop,Integer,Long Integer,问题陈述是: 问题陈述-:Altaf最近学习了数字基础,并开始着迷 Altaf了解到,对于大于10的基数,需要引入新的数字符号,惯例是使用英语字母表的前几个字母。例如,在基数16中,数字为0123456789ABCDEF。阿尔塔夫认为这是不可持续的;英语字母表只有26个字母,所以这个方案只能使用36个底数。但这对Altaf来说并没有问题,因为Altaf非常有创造力,只要她需要,就可以发明新的数字符号。(Altaf非常有创意。) Altaf还注意到,在基数2中,所有正整数都以数字1开头!然而,这是

问题陈述是:

问题陈述-:Altaf最近学习了数字基础,并开始着迷

Altaf了解到,对于大于10的基数,需要引入新的数字符号,惯例是使用英语字母表的前几个字母。例如,在基数16中,数字为0123456789ABCDEF。阿尔塔夫认为这是不可持续的;英语字母表只有26个字母,所以这个方案只能使用36个底数。但这对Altaf来说并没有问题,因为Altaf非常有创造力,只要她需要,就可以发明新的数字符号。(Altaf非常有创意。)

Altaf还注意到,在基数2中,所有正整数都以数字1开头!然而,这是唯一正确的基础。很自然,Altaf想知道:给定一个整数N,有多少个基数b使得N的base-b表示以1开头

输入格式: 输入的第一行包含一个整数T,表示测试用例的数量。T测试用例的描述如下。 每个测试用例由一行组成,其中包含一个整数N(以十为底)。 输出格式: 对于每个测试用例,输出一行,其中包含基数b,如果基数为无穷多,则输出无穷多。 限制条件:
1我不确定我是否遵循了循环中的逻辑(而且,据你自己承认,这里有一个问题)

循环的逻辑(即,“有多少个基表示N,以1开始表示”)可以大大简化

第一步是找到表示数字N所需的基数B的最高幂。这由logb(N)给出,截断为最接近的整数。Java没有带变量基的内置日志函数,但您可以通过计算log(n)/log(b)得到这个结果。
然后,你需要找到这个位置的数字。这可以通过使用整数除法将N除以b功率来计算。
从那以后,您只需要检查结果是否为1,如果是,则记录它

把它们放在一起,你会得到这样的结果:

private static int howmanybasessstartwithone(int num){
整数计数=0;

对于(int i=2;我非常感谢您!它工作正常,现在我将理解代码,再次感谢您。
 4

 6

 9

 11

 24
 4

 7

 8

 14
import java.util.*;

public class MyClass {
    public static void main(String args[]) {
      
        Scanner sc = new Scanner(System.in);
        long n,i,j,k,m;
        long count=0,rem1,index;
        long rem[];
        rem = new long[(int)100];
        int t = sc.nextInt();
        for(i=1;i<=t;i++)
        {
            
            n = sc.nextInt();
            j=2;
            while(j<=n)
            {

            // for(j=2;j<=n;j++)
            // {
                index=0;
                m = j;
                while(n>0)
                {
                    rem1 = n%m;
                    rem[(int)index++] = rem1;
                    n = (long) (n / m);
                }
                // for(k=index-1;k>=0;k--)
                // {
                    if(rem[1]==1)
                    {
                        count++;
                    }
                // }
                
                j++;
            }
            System.out.println(count);
                            
            // }
        }
        
      
    }
}