Readint and Writint

        本来没有打算再玩博客的,可是后来想想还是继续写博客,毕竟就这样闲置了有点可惜。那么言归正传,这篇博客就写点关于数据输入输出的优化好了。
       输入的优化有个前提,那就是数据很大,首先最基础的就是不用cin、cout,用scanf、printf,如果时间效率还是感觉不够高,那就应该把数字转化成字符,逐字符的输出,这样时间可以缩短,至于能优化到什么程度,貌似可以到原来的三分之一。还要罗嗦一句,在确认输入输出占用了很多时间以后才应该用读入优化,平时不要盲目使用,因为修改后的读入对数据的处理能力有限。言归正传,上代码吧。

int readint()   //处理对非负整数的输入
{
char ch = getchar();
while(!isdigit(ch))ch = getchar(); //过滤掉非数字,比如空格什么的
int re = 0;
while(isdigit(ch))
{
re = re * 10 + ch-'0';
ch = getchar();
}
return re;
}

        然后主程序可以这样用readint
int main()
{
int num[100];
int tot = readint();
for(int i = 0; i < 10; i ++)
{
num[i] = readint();
}
return 0;
}
         上面的程序只能处理非负整数,因为除了数字其他的所有字符全被过滤掉了,下面是另外一个版本:

int readint()
{
int res = 0;
bool flag = false;
scanf("%s", str);
for(int i=0;str[i];++i)
{
if(str[i] == '-') flag = true;
else if(str[i] == '.') continue;
else
{
res = res * 10 + str[i] - '0';
}
}
if(flag) res = - res;
return res;
}

         总之,要根据题目意思写出readint()。接下来还有一个输出优化,同样的,是把数字转化成字符输出。
void writeint(int i)
{
char miaolegemi[10];
int pos = 0;
if(i == 0)pos ++; //如果要输出的是“零”。。。
else while(i)
{
miaolegemi[pos++] = i % 10;
i /= 10;
}
for(int i = pos-1;i >= 0; i --)
putchar(miaolegemi[i] + '0');
putchar('\n'); // 输出的格式要按照题目来
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值