如何计算int的百分之几?
例如,我想从数字中得到30%,如果我将使用这个代码示例,我会得到错误的答案:
int number = 250;
int result = (number / 100) * 30;
Run Code Online (Sandbox Code Playgroud)
结果将是60,真正的答案是75,有没有办法计算它?
假设我们有一个包含数十亿个整数的非常大的文件,我们想找到k这些值的最大元素,
棘手的部分是它k本身也非常大,这意味着我们不能将k元素保留在内存中(例如我们有一个包含100个亿元素的文件,我们希望找到100亿个最大的元素)
我们怎么能这样做O(n)?
我的想法:
我们开始读取文件并用另一个保存k最大元素的文件(按递增顺序排序)检查它,如果读取元素大于第二个文件的第一行,我们删除第一行,然后将其插入第二行文件,时间复杂度将是O(NlogK)(如果我们随机访问该文件,否则它将是'O(Nk)'
任何想法这样做O(n),我想如果我们有外部版本Selection algorithm(快速排序中的分区算法)我们将能够做到这一点,O(n)但我无法在任何地方找到它
一些头文件存在于/src/dir1/(例如:a.h,b.h,c.h等等)。我的源文件存在于/src/dir2/file.cpp. 我使用了一些存在的头文件,/src/dir1/但在编译过程中出现了类似header file not found.
然后我更改了包含路径,如#include "../src/dir1/a.h",然后错误消失了,file.cpp但我not found在/src/dir1. 因为我包含了头文件 say a.h,它a.h包含了一些其他的头文件,这些头文件存在于/src/dir1/(比如说b.h和c.h存在于a.h)中。
如何添加头文件 ( a.h)/src/dir2/file.cpp以便它不应该要求修改存在于 中的头文件中的包含路径/src/dir1/?
注意:我正在使用scons构建。
我最近读完了第一卷.Bruce Eckel在C++中的思考,现在转向将这些知识用于实际应用.
我最近使用静态成员函数并尝试使构造函数静态,编译器对此不满意.我检查了书中的原因但找不到任何原因.
有谁能解释为什么?
PS:在看到一些回复之后,我想提一下,由于我知道C#(和Java)允许构造函数被声明为静态,因此产生了混淆.
函数asprintf()和vasprintf()是sprintf(3)和vsprintf(3)的类似函数,除了它们分配一个足够大的字符串来保存包括终止空字节的输出,并通过第一个参数返回指向它的指针.应该将此指针传递给free(3)以在不再需要时释放已分配的存储.
这是我的C代码
void function(){
char *out = NULL;
int parts[16] = {1,2,05,003};
asprintf(&out, "%d.%d.%d.%d", parts[0], parts[1], parts[2], parts[3]);
// free(out);
}
int main(void){
function();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当在调试模式下监视该函数时,我看到该变量在从函数返回时已被销毁.为什么我不需要free()上面的代码?
你能告诉我在什么情况下asprintf我需要免费使用吗?
顺便说一句,我有"gcc版本4.7.2(Ubuntu/Linaro 4.7.2-2ubuntu1)"

有人可以解释我的错误,我有这个课:
class Account
{
private:
string strLastName;
string strFirstName;
int nID;
int nLines;
double lastBill;
public:
Account(string firstName, string lastName, int id);
friend string printAccount(string firstName, string lastName, int id, int lines, double lastBill);
}
Run Code Online (Sandbox Code Playgroud)
但是当我打电话给它时:
string reportAccounts() const
{
string report(printAccountsHeader());
for(list<Account>::const_iterator i = listOfAccounts.begin(); i != listOfAccounts.end(); ++i)
{
report += printAccount(i->strFirstName, i->strLastName, i->nID, i->nLines, i->lastBill);;
}
return report;
}
Run Code Online (Sandbox Code Playgroud)
我收到错误within context,有人可以解释原因吗?
我试图找到c和c ++编译器的规则是什么,将字符串放入可执行文件的数据部分,不知道在哪里看.我想知道以下所有地址在c/c ++中是否保证与规范相同:
char * test1 = "hello";
const char * test2 = "hello";
static char * test3 = "hello";
static const char * test4 = "hello";
extern const char * test5; // Defined in another compilation unit as "hello"
extern const char * test6; // Defined in another shared object as "hello"
Run Code Online (Sandbox Code Playgroud)
在Windows上进行测试,它们都是一样的.但是我不知道它们是否适用于所有操作系统.
我有这个面试问题 -
交换整数序列中的字节
2和字节4.整数是4字节宽,即32位
我的方法是使用char *pointer和a temp char来交换字节.为清楚起见,我已经打破了步骤,否则可以考虑字符数组.
unsigned char *b2, *b4, tmpc;
int n = 0xABCD; ///expected output 0xADCB
b2 = &n; b2++;
b4 = &n; b4 +=3;
///swap the values;
tmpc = *b2;
*b2 = *b4;
*b4 = tmpc;
Run Code Online (Sandbox Code Playgroud)
还有其他方法吗?
我在warning: assignment from incompatible pointer type [enabled by default]编译以下代码时得到:
int main() {
int (*aptr) [5] = NULL;
int arr[5] = {1,2,3,4,5};
aptr = &arr[0];
printf("aptr = %p\n arr = %p\n", aptr, &arr[0]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我得到了正确的输出:
aptr = 0xbfcc2c64
arr = 0xbfcc2c64
Run Code Online (Sandbox Code Playgroud)
但是为什么我会收到不兼容指针类型的警告?
我正在尝试使用system()C语言调用我们可以做的事情.以下是我用来关闭我的机器的代码.它适用于Windows XP,但在Windows 7中启动时无法在我的机器上运行.问题一定是什么?我试过system("shutdown -R Now")openSUSE 11.3,它在那里工作正常.是什么导致这个平台问题在这里?我对system()相关的例程并不熟悉.
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char ch;
printf("Do you want to shutdown your computer now (y/n)\n");
scanf("%c",&ch);
if (ch == 'y' || ch == 'Y')
system("C:\\WINDOWS\\System32\\shutdown -s");
return 0;
}
Run Code Online (Sandbox Code Playgroud)