首页 > 代码库 > XidianOJ 1029 数一的逆袭
XidianOJ 1029 数一的逆袭
题目描述
数一是一个穷屌丝兼程序猿,是社会受剥削的底层人物,但是他有一个梦想,就是博得女神的欢心。这天,数一的女神说:"一直活在二次元的屌丝啊,一直活在二进制的程序猿啊,你们这群二货快告诉我这堆2是怎么回事?"女神已经被2的幂次搞晕过去了,她只是想知道2的n次方的最高位和最低位是多少,你能帮数一逆袭女神吗?
输入
第一行首先是一个正整数T(T<=100)
接下来是T行,每行代表一组数据,每组数据仅有一个正整数n(n<=100000)
输出
对于每组数据,输出两个整数,以空格分隔,分表表示2^n的最高位和最低位
--正文
最低位很好求,因为就是1,2,4,8,6,2,4,8,6循环
最高位的就是想办法将2^n转换为10^m的形式,利用数学知识得到
2^n = 10^(nlg2)
#include <stdio.h> #include <math.h> long long firstDigitOfPowOf2(int n) { double nLog2; if (n < 0) return -1; if (n == 3) return 8; nLog2 = n * log10(2); return (long long)pow(10, nLog2 - (int)nLog2); } int main(){ int T,time; scanf("%d",&T); for (time=1;time<=T;time++){ int n; scanf("%d",&n); int h = n % 4; int low[6] = {6,2,4,8,6,2}; int level = (int)(n * log10(2)) + 1; if (h == 0) h = 4; long long a = firstDigitOfPowOf2(n); printf("%lld %d\n",a,low[h]); } return 0; }
XidianOJ 1029 数一的逆袭
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。