做棺材燕尾开槽机器:编程高手快来!!!

来源:百度文库 编辑:高考问答 时间:2024/04/30 00:27:56
紧急!!如果有结果还会再加分!!!

用VC++或VC。
小S正在学习集合SP 是所有3的幂的集合,即SP={ 1,3,9,…… }。他想知道 SP 的所有子集中,按元素之和按递增顺序排在第n位的集合(SPn)是什么。他知道你是编程高手,所以他请求你帮他解决这个问题。输入 (请使用标准输入输出,而不要读写文件)输入数据只有一个整数n(1<n<=4, 000, 000, 000)。输出 (请使用标准输入输出,而不要读写文件).输出即为SPn的元素。按递增顺序,每行输出一个。即每输出一个元素,就换一次行.
写出主要的程序段也可以!

说白了就是把N换成二进制,然后把1位上的3的幂输出

比如20=(10100)2
所以是{9,81}

具体算法要用到高精度计算3的幂,换成二进制就用除2倒取余,复杂度O(l*logn),l是计算高精度的复杂度。

手头没有C++,不想写了,毕竟用记事本写没有缩进很不爽

include <iostream>
const int max_bit=100;
int num[max_bit]={1};

int main(){
using namespace std;
unsigned long n;
int l=0;
cin>>n;
while (n>0){
if (n%2==1){
for (int i=l;i>=0;i--) cout<<num[i];
cout<<endl;
}
n\=2;
for (int i=0;i<=l;i++) num[i]*=3;
for (int i=0;i<l;i++)
if (num[i]>=10) {
num[i+1]+=num[i]\10;
num[i]%=10;
}
while (num[l]>=10){
num[l+1]+=num[l]\10;
num[l++]%=10;
}
}
}
大概就是这么回事,这个程序应该不能编译吧,用notepad写的…很久不写程序了,一些基本的语法都未必正确……你自己改吧。
高手表踩我…