这是今天作业中的一个代码:

#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在不同状态下四舍五入的解决方法的更多相关文章

  1. 关于真机调试DDMS中的data文件夹打不开的解决方法

    关于真机调试DDMS中的data文件夹打不开的解决方法 今天在开发的时候需要导出程序中的数据库文件查看数据,数据库文件默认就在/data/data/应用包名/databases/数据库名 这个路径下, ...

  2. Node.js中针对中文的查找和替换无效的解决方法

    Node.js中针对中文的查找和替换无效的解决方法.   //tags的值: tag,测试,帖子 var pos1 = tags.indexOf("测"); //这里返回-1 ta ...

  3. C语言中判断int,long型等变量是否赋值的方法

    博主这段时间在写一些C程序的代码,由于以前对C不是了解很多,故遇到很多瓶颈,当然,其中也有很多有趣的方法可以利用以解决这些难题,下面这个问题就是博主遇到的一个麻烦. 声明了 int ,long 型等局 ...

  4. 十六 在沉睡中停止(在sleep() 状态下停止线程)

    1 如果线程在sleep()状态下停止线程,会是什么效果? 答案: 如果在sleep状态下停止某一线程,会进入sleep的catch块中, 抛出InterruptedException 异常,并且清除 ...

  5. C语言-人狼羊菜问题-最容易看懂的解决方法及代码

    题目描述:农夫需要把狼.羊.菜和自己运到河对岸去,只有农夫能够划船,而且船比较小,除农夫之外每次只能运一种东西,还有一个棘手问题,就是如果没有农夫看着,羊会偷吃菜,狼会吃羊.请考虑一种方法,让农夫能够 ...

  6. CLOSE_WAIT状态的原因与解决方法 --转

    转自:http://blog.chinaunix.net/uid-20357359-id-1963662.html 这个问题之前没有怎么留意过,是最近在面试过程中遇到的一个问题,面了两家公司,两家公司 ...

  7. CLOSE_WAIT状态的原因与解决方法(转载留自己看)

    这个问题之前没有怎么留意过,是最近在面试过程中遇到的一个问题,面了两家公司,两家公司竟然都面到到了这个问题,不得不使我开始关注这个问题.说起CLOSE_WAIT状态,如果不知道的话,还是先瞧一下TCP ...

  8. 在VS中使用Boost库出现Macro redefinition错误的解决方法(warning C4005)

    最近使用Boost库做多线程开发,可视在vs中编译工程师总是遇到Macro redefinition错误,类似下面的错误描述 1>c:\program files (x86)\microsoft ...

  9. VS2019中scanf返回值被忽略的问题及其解决方法

    目录 [问题](#昨天在使用Visual Studio 2019编写C语言程序时遇到了scanf返回值被忽略问题) 问题原因 方法① 方法② 方法③ 方法④ 昨天在使用Visual Studio 20 ...

随机推荐

  1. Thinking in Java——笔记(18)

    I/O The original byte-oriented library was supplemented with char-oriented, Unicode-based I/O classe ...

  2. 后台系统组件:一丶bootstrap table

    http://www.cnblogs.com/landeanfen/p/4976838.html (bootstrap table) http://www.cnblogs.com/landeanfen ...

  3. 保证唯一的一种js提交数据方式,还不错

    <div class="project_right"> <div class="project_title_right" id="m ...

  4. java中分页效果的实现代码

    首先是将分页所需的一些个资源 ,抽象出一个javabean对象-PageBean: 先把需要分页的数据或是记录都查询出来 存入一个集合类里如List或是Vector, 然后利用其sublist(int ...

  5. django-- Models

    数据库配置 django默认支持sqlite,MySQL,Oracle,postgresql数据库 如何将数据库设置为MySQL 将setting中的database修改: DATABASES = { ...

  6. idea 光标变成粗体且当前文件搜索功能无法使用的问题

    今天安装了idea最新版,安装完成后发现光标变成了粗体,并且快捷键在使用时出现了问题,比如:ctrl+F搜索功能无法使用 经过反复修改配置也无法改善情况,后来一次重启看到下面小窗弹出有关vim的一个提 ...

  7. CSS中定位和浮动对行内元素的宽高的影响

    行内元素的大小是由元素里面的内容撑开的宽高决定的,就算在css中对行内元素设置width,height.行内元素也会忽略宽高的设置. 但是当行内元素使用position:absolute或者posit ...

  8. method

  9. 高级java必会系列一:zookeeper分布式锁

    方案1: 算法思路:利用名称唯一性,加锁操作时,只需要所有客户端一起创建/test/Lock节点,只有一个创建成功,成功者获得锁.解锁时,只需删除/test/Lock节点,其余客户端再次进入竞争创建节 ...

  10. iOS:个人浅谈工厂模式

    一.什么是工厂方法? 正式的解释是:在基类中定义创建对象的一个接口,让子类决定实例化哪个类.工厂方法让一个类的实例化延迟到子类中进行.工厂方法要解决的问题是对象的创建时机,它提供了一种扩展的策略,很好 ...