繁体   English   中英

如何在 C++ 中将 cout 更改为 printf? 或者如何使控制台应用程序运行得更快?

[英]How to change cout to printf in C++? or how to make the console application run faster?

我有一个家庭作业,它通过一个编译器检查一切是否正确,但它不断给出结果:“超出时间限制”,该应用程序在普通 C++ 编译器中正常工作,但我必须将代码发送给 Themis,但没有因“超出时间限制”而接受

任务:输入:在第一个输入行中给出指定测试次数的整数 t (1 ≤ t ≤ 100000)。 每个测试由三个整数给出:a、b、m 如上定义(1 ≤ a ≤ 10^9、0 ≤ b ≤ 10^9、1 ≤ m ≤ 10^6)。

输出:

应打印 T 行。 在每一行中,查询的答案是: (a^b)% m

输入数据示例:

2
3 2 10

正确答案是: 9

一位朋友告诉我将 cout 更改为 printf,这可能会导致运行速度更快,但我不知道该怎么做。

我的代码

#include <iostream>

using namespace std;

int main()
{
    int t;
    cin>>t;

    for (int i=0; i<t; ++i)
    {
        int a,b,m;
        long long int x,wynik=1;

        cin>>a>>b>>m;

        x=(long long int) a;

        do
        {
            x%=(long long int)m;
            if (b&1) {
                wynik*=x;
                wynik%=(long long int)m;
            }
            x*=x;
        } while (b>>=1);

        cout <<wynik<<endl;;
    }

    return 0;
}

回答字面问题,如何将cout更改为printf


您需要#include <cstdio>而不是#include <iostream> ,它是“C 语言标准输入和输出”的缩写。

而不是cout <<wynik<<endl; ,你想要printf("%d\\n", (int) wynik) 这里, "%d\\n"是一个格式化字符串,表示“打印下一个参数,它应该是int ,十进制,然后打印一个换行符”。

您可能还想使用 C 样式输入,然后更改cin>>a>>b>>m; into scanf("%d%d%d", &a, &b, &m); . 这表示“读取三个十进制整数,一个读入变量a&正在获取变量的地址),另一个读入b ,另一个读入m


也就是说,请注意 C 风格和 C++ 风格的输入和输出的相对速度取决于很多因素,包括编译器版本、操作系统和环境。 在另一个测试环境中,您可能会发现cout实际上与printf相当或更快。

如果你想使用 cin 和 cout 你可以在 main() 中插入这一行

cin.tie(0);
cout.tie(0);
ios_base::sync_with_stdio(0);

它应该和 priantf 和 scanf 一样快。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM