| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 413 人关注过本帖
标题:求教:简单程序挑错!!~~~
只看楼主 加入收藏
huicpc0876
Rank: 2
等 级:论坛游民
帖 子:69
专家分:50
注 册:2009-7-24
结帖率:92.59%
收藏
已结贴  问题点数:20 回复次数:5 
求教:简单程序挑错!!~~~
题目,输入一个整数,求与他最接近的整数,要求,从最低位开始四舍五入。
例如1445 -》1450-》1500-》2000,所以最后输出2000
Sample Input
9
15
14
4
5
99
12345678
44444445
1445
446
 
Sample Output
20
10
4
5/*小于10的不做考虑*/
100
10000000
50000000
2000
500

我的代码:
#include "stdio.h"
#include "math.h"
int main()
{ int n,i,j;
 long  t,d;
 scanf("%d",&n);
 while(n--)
{
    scanf("%ld",&d);
    for(j=0;d>pow(10,j+1);j++)
    {
        t=(d%pow(10,j+1))/pow(10,j); /*依次求个位十位百位。。的数值*/
        if(t>=5)
            d=d+pow(10,j+1)-t*pow(10,j);
         
        else {d=d-t*pow(10,j); /*每次四舍五入后改变d的值*/
           
    }
    printf("%ld\n",d);
}
return 0;
}
搜索更多相关主题的帖子: 挑错 
2009-08-05 15:50
godbless
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:216
专家分:950
注 册:2009-7-24
收藏
得分:0 
其实可以换个别的思路的..

用字符串的形式解决会好点.
2009-08-05 15:55
godbless
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:216
专家分:950
注 册:2009-7-24
收藏
得分:12 
回复 楼主 huicpc0876

这个想输入多少位数可以改变数组大小来决定.

回头看看你的.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
int main()
{
 int i,n,sLen;
 char str[1000];
 scanf("%d",&n);
 while(getchar()!='\n');
 while(n--)
      {
       gets(str);
       sLen=strlen(str);
       if(str[1]=='\0') {puts(str);continue;}   //当输入的数小于10
       for(i=sLen-1;i>0;--i)
          if(str[i]>='5') {str[i]='0';str[i-1]++;}
            else str[i]='0';                               //四舍五入..
       if(str[i]==58) {str[0]='0';printf("1%s\n",str);}    //当最高位是否大于9时的处理58为'9'的后一个字符
         else puts(str);
      }
 system("pause");
 return 0;
}

[ 本帖最后由 godbless 于 2009-8-5 16:29 编辑 ]
2009-08-05 16:20
CrystalFan
Rank: 8Rank: 8
来 自:江苏南京
等 级:蝙蝠侠
帖 子:187
专家分:802
注 册:2009-7-30
收藏
得分:8 
错误:
t=(d%pow(10,j+1))/pow(10,j);

pow(10,j+1)返回值是double型的,不能用运算符“%”。
如果输入数字保证在 long 的范围内,则可以改成:
程序代码:
t=(d%(long)pow(10,j+1))/(long)pow(10,j); /*依次求个位十位百位。。的数值*/ 
if(t>=5)  
   d=d+(long)pow(10,j+1)-t*(long)pow(10,j);  
else d=d-t*(long)pow(10,j); /*每次四舍五入后改变d的值*/

正解:
不过,要处理数据范围很大的数时,应该把数据当字符串读入,直接判断各位在进位(如果有进位则加1,否则不变)后是否大于'5'。(如2,3楼的做法)
优化:
不必每次从最低位判断进位,只需从高位往下搜索,找到第一个大于'5'的数位开始运算。

[[it] 本帖最后由 CrystalFan 于 2009-8-5 16:32 编辑 [/it]]
2009-08-05 16:29
huicpc0876
Rank: 2
等 级:论坛游民
帖 子:69
专家分:50
注 册:2009-7-24
收藏
得分:0 
回复 4楼 CrystalFan

你很强大!~~
2009-08-06 00:09
huicpc0876
Rank: 2
等 级:论坛游民
帖 子:69
专家分:50
注 册:2009-7-24
收藏
得分:0 
回复 3楼 godbless

你也很强啊,你都回我好几个帖子了!~~
2009-08-06 00:10
快速回复:求教:简单程序挑错!!~~~
数据加载中...
 
   



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

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