写了一道题,很有趣,分享给大家(主要是我都不知道怎么写开头)
Description
任何一个正整数都可以用2的幂次方表示。例如:137=27+23+20。同时约定方次用括号来表示,即ab可表示为a(b)。由此可知,137可表示为:2(7)+2(3)+2(0),进一步:7= 2(2)+2+2(0),(21用2表示)3=2+2(0) ,所以最后137可表示为:2(2(2)+2+2(0))+2(2+2(0))+2(0)。
又如:1315=210 +28 +25 +2+1。
所以1315最后可表示为:2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
Input
正整数n(n≤20000)
Output
符合约定的n的0,2表示(在表示中不能有空格)
Sample Input 1315 Sample Output 2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
OK,话不多说,上代码!
#include<bits/stdc++.h>
using namespace std;
int n;
void mcf(long long in){
int flag = 0;
for(int i = 0; i < 64; i++){
if(in < 0){
if(flag > 0){
printf("+");
}else{
flag = 1;
}
if(64 - i - 1 == 1){
printf("2");
}else{
printf("2(");
if(64 - i - 1 == 0){
printf("0");
}else{
mcf(64 - i - 1);
}
printf(")");
}
}
in = in << 1;
}
}
int main(){
cin >> n;
mcf(n);
return 0;
}
(喵,这题让我写了好久,希望大佬给个关注,有关必回,求求啦!)
bye~