-
定位:2020年第十一届蓝桥杯省赛C/C++ B组试题F(7月试题)
-
原题:
-
属性:模拟
-
难度:破壳
-
独白:
这题才是局外人口中的蓝桥杯吧。。。
嗯。。。没啥好说的,15分就是签到分了。但也不是一个注意点都没有,考虑到这里的数据量很大,我们还是采用long long int类型的数据比较保险,然后输出的话还是用printf()函数比较好,毕竟数据量大。
补充一个知识点:关于long long类型的输入输出“%lld"和”%llu"是linux下gcc/g++用于long long int类型(64 bits)输入输出的格式符。
而"%I64d"和"%I64u"则是Microsoft VC++库里用于输入输出__int64类型的格式说明。
Dev-C++使用的编译器是Mingw32,Mingw32是x86-win32 gcc子项目之一,编译器核心还是linux下的gcc。
进行函数参数类型检查的是在编译阶段,gcc编译器对格式字符串进行检查,显然它不认得"%I64d",所以将给出警告“unknown conversion type character `I’ in format”。对于"%lld"和"%llu",gcc理所当然地接受了。
Mingw32在编译期间使用gcc的规则检查语法,在连接和运行时使用的却是Microsoft库。
这个库里的printf和scanf函数当然不认识linux gcc下"%lld"和"%llu", 但对"%I64d"和"%I64u",它则是乐意接受,并能正常工作的。 -
代码:
//#include<bits/stdc++.h>
#include<iostream>
#include<cstdio>
using namespace std;
long long int n;
int main(){
cin>>n;
while(n>0){
printf("%I64d ",n);
n/=2;
}
return 0;
}
- 总结:越是简单题,越要谨慎对待。
- 感悟:宽以待人,严于律己。
- 归档:已归档。