#include <string.h>
char num[110]
char result[110]
int len
int main()
{
int i,j
int find1 = 0
int find2 = 0 //find1:是否找到小数点位置标志位,find2:是否找到首个非零数位置,0:表示未找到
int index
scanf("%s",num)
len = strlen(num) //读取字符串长度
for(i = 0i < len++i) //寻找原字符串中小数点与首个非零盯衡数的位置
{
if(find1 && 裂则知find2)
break
if(num[i] == '.'){
s1 = i
find1 = 1
}
else if(num[i] != '0' && !find2){
find2 = 1
s2 = i
}
}
if(s1-s2 > 0) //根据二个位置确定指数大小
index = s1-s2-1
else if(s2 > s1)
index = s1-s2
j = 0
for(i = s2i < len++i) //确定底数
{
if(num[i] == '.')
continue
else if(i == s2) { //确定底数小数点位置
if(num[i+1]){
result[j++] = num[i]
result[j++] = 肆消'.'
}
else
result[j++] = num[i]
}
else
result[j++] = num[i]
}
result[j] = '\0'
printf("%se%d\n",result,index)
return 0
}
C的话可老基碰以用 printf("%e " ....%e选项就是科学计数法侍谈锋纤显示C++的话 cout <<scientific <<要输出的东西 这样就可以。
第一个问题,你自定义函数的方法非常混乱,下面是我答歼毁改的希望你仔细看看哪些地方动了位置,你的算法没错。#include "stdio.h"
#include "conio.h"
float sub(float n)
void main()
{
float n,m
scanf ("%f",&n)
m = sub(n)
printf ("sum=%f\n",m)
getch()
}
float sub(float n)
{
float i,s
s=0
for (i=1i<=ni++)
{
s=s+1/i
}
return (s)
}
至于你说的第二个问题。。。想不出办法来。。
你都弄到100的10次方的数量级了。。。大概只有求助于
高级的数据改搏类型了。
不过有个想法,首先这个数量级的数肯定是科学计数法表示的。
他前面的因数你看看清备能不能在设定浮点数精度的基础上,对它
*** 作下,也许能得到你的答案。
比如 1.73212352132131231 e17 这个数,你想办法对
1.73212352132131231和17进行下 *** 作。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)