| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5544 人关注过本帖
标题:科学计数法的转换(求简练代码,虽然我已经A了,但觉得代码冗长,求大神指导 ...
只看楼主 加入收藏
搬砖
Rank: 2
等 级:论坛游民
帖 子:68
专家分:37
注 册:2016-10-13
结帖率:90%
收藏
已结贴  问题点数:20 回复次数:7 
科学计数法的转换(求简练代码,虽然我已经A了,但觉得代码冗长,求大神指导)
数据中的实数的科学记数法格式转换成为普通的
十进制格式(如果转换后为整数,则不显示
小数部分和小数点)。
输入格式
  输入第一行包含一个整数T(T<=20),表示有T组测试数据。

  对每一组测试数据,仅有一行格式为A.BeD的字符串。A,B和D均为整数
(0<=A<=9,0<=B<10^100,0<=D<=100)。其中,
A和D均没有前导0(但可以为0),B没有尾随0(但可以为0)。另外,当A为0的时候,
D也必须同时为0。
输出格式
  对于每组测试数据输出一行输入所对应的十进制格式的实数H。如果H是一个整数,则
不显示小数部分及小数点。以p.q的格式输出实数H,其
中p和q均为整数且p不能含有前导0(但p可能为0),q不能含有尾随0。
输入样例
3

2.169e2

7.539e3

0.22e0
输出样例
216.9

7539

0.22
搜索更多相关主题的帖子: 格式转换 十进制 小数点 字符串 
2017-01-03 14:28
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10609
专家分:43210
注 册:2014-5-20
收藏
得分:0 
strtod()
2017-01-03 15:25
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10609
专家分:43210
注 册:2014-5-20
收藏
得分:0 
#include<stdio.h>
#include<stdlib.h>
void main()
{
    char a[]="2.169e2";
    char b[]="7.539e3";
    char c[]="0.22e0";
    printf( "a=%lf\nb=%lf\nc=%lf\n", strtod(a,NULL),strtod(b,NULL),strtod(c,NULL) );
}
2017-01-03 15:28
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10609
专家分:43210
注 册:2014-5-20
收藏
得分:0 
要求不含尾随0
printf( "a=%lf\nb=%lf\nc=%lf\n", strtod(a,NULL),strtod(b,NULL),strtod(c,NULL) );
改为:
printf("a=%g\nb=%g\nc=%g\n", strtod(a,NULL),strtod(b,NULL),strtod(c,NULL));
2017-01-03 16:06
搬砖
Rank: 2
等 级:论坛游民
帖 子:68
专家分:37
注 册:2016-10-13
收藏
得分:0 
回复 4楼 吹水佬
数据不能通过哦,例如这样 char a[]="2.1696777909887655e10";
2017-01-04 21:08
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
明白了~字符串长度能上百位,要字符串转换成字符串~

这份题代码长点正常~在100行以内还是可以接受的~可以试试交换小数点~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-01-04 21:55
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10609
专家分:43210
注 册:2014-5-20
收藏
得分:20 
以下是引用搬砖在2017-1-4 21:08:03的发言:

数据不能通过哦,例如这样 char a[]="2.1696777909887655e10";

没细看题目了,要求是可能超过100位长,只能用字符串表示。
看看这样能否符合题目要求:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *_fun(char *in, char *out)
{
    int i, n;
    char *p, *p2;
    for (p=in; *p!='e'; p++) NULL;
    n = atoi(++p);
    for (p=in,p2=out; *p!='.' && *p; p++,p2++)
        *p2 = *p;
    for (i=0,p++; i<n && *p!='e'; i++,p++,p2++)
        *p2 = *p;
    if ( *p != 'e')
        *p2++ = '.';
    for (; *p!='e'; p++,p2++)
        *p2 = *p;
    for (; i<n; i++,p2++)
        *p2 = '0';
    *p2 = 0;
    return out;
}

main()
{
    char a[]="2.169e2";
    char b[]="7.539e3";
    char c[]="0.22e0";
    char d[]="2.1696777909887655e10";
    char s[1024]={0};
    printf("%s\n", _fun(a, s));
    printf("%s\n", _fun(b, s));
    printf("%s\n", _fun(c, s));
    printf("%s\n", _fun(d, s));
}


[此贴子已经被作者于2017-1-5 07:09编辑过]

2017-01-05 06:16
搬砖
Rank: 2
等 级:论坛游民
帖 子:68
专家分:37
注 册:2016-10-13
收藏
得分:0 
回复 7楼 吹水佬
指针用起来好像很方便,可惜我还不够熟练,看来要加强练习,感谢大佬!
2017-01-05 09:07
快速回复:科学计数法的转换(求简练代码,虽然我已经A了,但觉得代码冗长,求大 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023018 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved