文章目录
- P5707【深基2.例7】数字反转
- 题目描述
- 输入格式
- 输出格式
- 样例
- 样例输入
- 样例输出
- 我的题解
- 结果
- 优解1
- 优解2
- 优解3
- 反思总结
- 一、关于C++的输入输出效率问题
- 二、关于C/C++中函数参数的传递顺序问题
P5707【深基2.例7】数字反转
题目描述
输入一个不小于 且小于
,同时包括小数点后一位的一个浮点数,例如
,要求把这个数字翻转过来,变成
输入格式
一行一个浮点数
输出格式
一行一个浮点数
样例
样例输入
123.4
样例输出
4.321
我的题解
//C语言
#include <stdio.h>
int main()
{
char arry[5];
for (int i = 0; i < 5; i++)
{
scanf("%c", &arry[i]); //将浮点数的每一位保存在字符数值中
}
for (int i = 4; i >= 0; i--) //反方向输出字符数组
{
printf("%c", arry[i]);
}
return 0;
}
结果
Accepted
优解1
//C++
#include<bits/stdc++.h>//万能头文件
using namespace std;
char a, b, c, d;
int main(){
scanf("%c%c%c.%c", &a, &b, &c, &d);
printf("%c.%c%c%c", d, c, b, a);
return 0;
}
优解2
//C++
#include<bits/stdc++.h>//万能头文件
using namespace std;
string a;
signed main()
{
cin>>a;
int len=a.size(); //读取长度
for(int i=len-1;i>=0;i--) //反转
cout<<a[i];
return 0;
}
优解3
//C语言
#include <stdio.h>
int main()
{
printf("%c%c%c%c%c", getchar(), getchar(), getchar(), getchar(), getchar());
return 0;
}
反思总结
一、关于C++的输入输出效率问题
在C++的输入输出方法里,printf
/scanf
比cin
/cout
速度更快。如果追求速度,比如在算法比赛这种情况下最好使用printf/scanf,但是为什么printf
/scanf
比cin
/cout
更快呢,我在其他大佬的文章里找到了几点解释:
● 默认情况,cin
与stdin
总是保持同步的,也就是说这两种方法可以混用,而不必担心文件指针混乱,同时cout
和stdout
也一样,两者混用不会输出顺序错乱。正因为这个兼容性的特性,导致cin有许多额外的开销,如何禁用这个特性呢?只需一个语句std::ios::sync_with_stdio(false);
这样就可以取消cin于stdin
的同步了,此时的cin
就与scanf
差不多了。
● 另一种解释: cout
在输出时总是要先将输出的存入缓存区。而printf
直接调用系统进行IO,它是非缓存的。所以cout
比printf
慢。
而scanf
是格式化输入,printf
是格式化输出。
cin
是输入流,cout
是输出流。效率稍低,但书写简便。
格式化输出效率比较高,但是写代码麻烦。
所以根据自己的实际需求使用就ok了。
知识点来源于两篇大佬的文章:
文章1文章2
二、关于C/C++中函数参数的传递顺序问题
在优解3中,我们可以看到printf
函数输出getchar
时顺序是从后往前的。
这体现了C/C++函数参数传递顺序的特点:参数传递从后往前
例如:
#include <stdio.h>
int main()
{
int aa = 10, bb = 20, cc = 30;
printf("\n %d %d %d \n", aa + bb + cc, (bb = bb * 2 + cc), (cc = cc * 2));
return 0;
}
运行结果:
170 100 60
这个例子就体现出了C/C++中函数的参数是从后往前传递的