[英]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.