棋盘放麦子

题目描述
你一定听说过这个故事。国王对发明国际象棋的大臣很佩服,问他要什么报酬,大臣说:请在第 11 个棋盘格放 11 粒麦子,在第 22 个棋盘格放 22 粒麦子,在第 33 个棋盘格放 44 粒麦子,在第 44 个棋盘格放 88 粒麦子,…后一格的数字是前一格的两倍,直到放完所有棋盘格(国际象棋共有 6464 格)。

国王以为他只是想要一袋麦子而已,哈哈大笑。

当时的条件下无法准确计算,但估算结果令人吃惊:即使全世界都铺满麦子也不够用!

请你借助计算机准确地计算,到底需要多少粒麦子。

由于数值过大用int,long类型的数值存不下,因此只能用String类型来存储,就涉及到了大数乘法的方法,但是因为一个因子为2所以又比大数乘法简单一些。

 public static void main(String[] args) {
    
    
        String s = "1";
        for(int i = 1;i <= 64;i++) {
    
    
            s = sub(s);
        }
        int l = s.length();
        String s1 = s.substring(l-1);
        String s2 = s.substring(0,l-1);
        char ss = s1.charAt(0);
        int t = (int)(ss-'0');
        t--;
        char sss = (char)(t+'0');
        s = s2+sss;
        System.out.println(s);
    }

    public static String sub(String s) {
    
    
        char arr[] = s.toCharArray();
        String A = "";
        int f = 0;
        for(int i = arr.length-1;i >= 0;i--) {
    
    
            int tem = (int)(arr[i]-'0');
            tem *= 2;
            tem += f;
            if(tem >= 10)
                f = 1;
            else
                f = 0;
            tem = tem%10;
            char ss = (char)(tem+'0');
            A = ss+A;
        }
        if(f == 1)
            A = "1"+A;
        return A;
    }

猜你喜欢

转载自blog.csdn.net/qq_48627750/article/details/122954914