| | |
|
岱瀛
(deving)
| |
| | |
|
| | |
|
组别 | 经略使 |
级别 | 左将军 |
好贴 | 1 |
功绩 | 2293 |
帖子 | 1370 |
编号 | 55810 |
注册 | 2005-12-22 |
来自 | 人间 |
家族 | 慕容世家 |
| |
| | |
|
|
|
没想到菲菲也会写程序啊. 佩服一个。
后面两道菲菲写了,就不重复了,第一道代码如下:
#include <stdio.h>
#include "math.h"
void main()
{
int m,n=1;
scanf("%d",&m);
if (m<0) m=-m;
n += (int)log10(m);
printf("%d\n",n);
}
m没有说明是正数还是负数.所以直接求对数的做法是不对的
本来以为要判断0,可是发现log10(0)不会出错,返回0,那就省掉判断的代码了
当然,楼主不想引入math.h的话,可以用简单的循环除10的方法吧,效率应该没有这个快.
如果考虑m是有小数的,那么如下:
#include <stdio.h>
#include "math.h"
void main()
{
float m;
int n=1;
scanf("%f",&m);
if (m<1&&m>-1&&m!=0)
{
n=0;
printf("%d\n",n);
return;
}
if (m<0) m=-m;
n += (int)log10(m);
printf("%d\n",n);
}
p.s 有个疑惑,0算1位吧.0.123算几位.我这里把0算1位整数,0.123算0位整数,怪怪的
当然,数有越界的问题,由于题目中的M始终没有定义域,而电脑里的类型都是有自己的定义域的,所以,其实这道题要是仔细去分析,还要判断是否超过最大值的异常处理.
然后再考虑m 是从键盘上输入的,那么从代码健壮性看,有必须考虑是否有人乱输入东西,不输入数字而 是随便输入字符的问题或者说输入的是十六进制.这个就比较麻烦了,楼主的题目应该是小作业吧,老师不会想那么多的,就偷懒吧
[ 本帖最后由 岱瀛 于 2007-1-11 11:18 编辑 ]
|
|
|
|