C语言中关于POW在不同状态下四舍五入的解决方法
这是今天作业中的一个代码:
#include <stdio.h>
#include<math.h>
int main()
{
printf("请输入一个整数:");
int c,a,x,d,f,i,mix;
scanf("%d",&a);
if(a>999999999)
{
printf("越界!");
return 0;
}
c=a;
printf("它的逆序输出为:");
mix=0;
while(c!=0)
{
d=c%10;
c=c/10;
printf("%d",d);
mix++;
}
printf("\n它是一个%d位数\n",mix);
x=(int)(pow(10,mix-1));
printf("它的各位数字为:");
do
{
f=a/x;
a=a%x;
x=x/10;
printf("%d ",f);
}
while(x!=0);
return 0;
}
但是在实际运行中出现了错误,也就是“吞数字“”的现象。为了查找错误,经基友提醒,在x=(int)(pow(10,mix-1))后加了一个printf语句,来检查输出的x值。结果是这样的:
请输入一个整数:123
它的逆序输出为:321
它是一个3位数
99
它的各位数字为:1 2
对,看见了吗,我本来想要的x值是100,但是这里进行了舍去,变成了99,那么接下来的程序就会少走一步,即最后的数字不会被计算并读取。当然不管怎么说这样的程序都是不健壮的,还需要修改。
既然是舍入的话,那么会出现+1,-1还有合适共三种情况,我们来给这个一个判断
-1,9999,能整除9;正好,10的倍数,一定能整除10
写一个if语句进行判断:
if(x%9==0) x=x+1;
if(x%10==0) x=x;
但是x=1时该怎么办?结果是1,一定会进入第三种情况,此时程序出现错误。解决方法很简单if (x%10==0||x==1) x=x;
但是即使是这样也被老师批了一顿T^T,理由是程序太过复杂(明明只有42行啊!),但是老师说我们还是要尽可能的精简。。。这体现了算法的优劣。同样的程序,我用if循环也可以写出来,但是那样的程序很不好,判断条件太多,语句也太多,能算出来,但是你能说它好吗?当然不能。之前有一个输出100000以内素数的程序,老师强制规定程序的运行时间不能超过1秒,那就必须用开平方的形势,不开方也能算,但是时间是6秒多。算了,说多了,继续我们这个程序。这里的强制类型转换是在pow后,也就是先进行平方运算再转换,那么,我们直接在pow后加一个0.5,如果本来是要舍去的加上0.5就会取入,99会成100.这样不就不用对x的值进行判断再转换了吗?
x=(int)(pow(10,mix-1)+0.5);省了3行,而且算法更优秀
C语言中关于POW在不同状态下四舍五入的解决方法的更多相关文章
- 关于真机调试DDMS中的data文件夹打不开的解决方法
关于真机调试DDMS中的data文件夹打不开的解决方法 今天在开发的时候需要导出程序中的数据库文件查看数据,数据库文件默认就在/data/data/应用包名/databases/数据库名 这个路径下, ...
- Node.js中针对中文的查找和替换无效的解决方法
Node.js中针对中文的查找和替换无效的解决方法. //tags的值: tag,测试,帖子 var pos1 = tags.indexOf("测"); //这里返回-1 ta ...
- C语言中判断int,long型等变量是否赋值的方法
博主这段时间在写一些C程序的代码,由于以前对C不是了解很多,故遇到很多瓶颈,当然,其中也有很多有趣的方法可以利用以解决这些难题,下面这个问题就是博主遇到的一个麻烦. 声明了 int ,long 型等局 ...
- 十六 在沉睡中停止(在sleep() 状态下停止线程)
1 如果线程在sleep()状态下停止线程,会是什么效果? 答案: 如果在sleep状态下停止某一线程,会进入sleep的catch块中, 抛出InterruptedException 异常,并且清除 ...
- C语言-人狼羊菜问题-最容易看懂的解决方法及代码
题目描述:农夫需要把狼.羊.菜和自己运到河对岸去,只有农夫能够划船,而且船比较小,除农夫之外每次只能运一种东西,还有一个棘手问题,就是如果没有农夫看着,羊会偷吃菜,狼会吃羊.请考虑一种方法,让农夫能够 ...
- CLOSE_WAIT状态的原因与解决方法 --转
转自:http://blog.chinaunix.net/uid-20357359-id-1963662.html 这个问题之前没有怎么留意过,是最近在面试过程中遇到的一个问题,面了两家公司,两家公司 ...
- CLOSE_WAIT状态的原因与解决方法(转载留自己看)
这个问题之前没有怎么留意过,是最近在面试过程中遇到的一个问题,面了两家公司,两家公司竟然都面到到了这个问题,不得不使我开始关注这个问题.说起CLOSE_WAIT状态,如果不知道的话,还是先瞧一下TCP ...
- 在VS中使用Boost库出现Macro redefinition错误的解决方法(warning C4005)
最近使用Boost库做多线程开发,可视在vs中编译工程师总是遇到Macro redefinition错误,类似下面的错误描述 1>c:\program files (x86)\microsoft ...
- VS2019中scanf返回值被忽略的问题及其解决方法
目录 [问题](#昨天在使用Visual Studio 2019编写C语言程序时遇到了scanf返回值被忽略问题) 问题原因 方法① 方法② 方法③ 方法④ 昨天在使用Visual Studio 20 ...
随机推荐
- VS启用调试
今天访问127.0.0.1 发现 与localhost 不是访问的同一个内容. 于是乎,就向到了另一个方法来调试程序. 1.在IIS 建立站点 并指向程序源. 2.启动vs 调试→附加到进程→找到w ...
- nginx安装waf防护
一.安装nginx 二.安装luajit2.0 三.安装ngx_devel_kit#wget https://github.com/simpl/ngx_devel_kit/archive/v0.2.1 ...
- Clock rate
https://en.wikipedia.org/wiki/Clock_rate The clock rate typically refers to the frequency at which a ...
- iOS AutoLayout自动布局&Masonry介绍与使用实践
Masonry介绍与使用实践:快速上手Autolayout http://www.cnblogs.com/xiaofeixiang/p/5127825.html http://www.cocoachi ...
- How to reset password for unknow root
1. Click "e" when entering the grub 2. Add option " init=/bin/sh" to linux line. ...
- oracle数据库之数组的操作样例
1.创建bean对象 --创建bean对象 CREATE OR REPLACE TYPE "FM_FLOWCPHDTSWJJIMPBEAN" as object ( wf_no ) ...
- Java 多线程之单例设计模式
转载:https://segmentfault.com/a/1190000007504892 概念: Java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍两种:懒汉式单例.饿汉 ...
- Python开发【前端】:HTML
HTML HTML是英文Hyper Text Mark-up Language(超文本标记语言)的缩写,他是一种制作万维网页面标准语言(标记).相当于定义统一的一套规则,大家都来遵守他,这样就可以让浏 ...
- Android 强烈推荐:程序员接私活那点事
今天周末在家宅着,并不是我不想运动,是因为北京的雨雪交加导致我想在家写文章,不过想想给大家写文章还是蛮惬意的,望一眼窗外,看一眼雪景,指尖在键盘上跳动,瞬间有种从屌丝程序员转变成了小姑娘们都羡慕的文艺 ...
- storm学习
一 storm 相关术语 . Nimbus storm 集群主节点,负责资源分配和任务调度.(相当于namenode) . supervisor storm集群工作节点,接受Nimbu分配任务,管理w ...