标题:一个A+B的问题,求帮忙看一下哪里有错误?
只看楼主
青蝶
Rank: 2
等 级:论坛游民
帖 子:160
专家分:51
注 册:2018-2-4
结帖率:92%
已结贴  问题点数:20 回复次数:16 
一个A+B的问题,求帮忙看一下哪里有错误?
题目描述:
给定两个整数A和B,其表示形式是:从个位开始,每三位数用逗号","隔开。
现在请计算A+B的结果,并以正常形式输出。 (-10^9<A,B<10^9)
输入包含多组数据数据。

想问一下这个代码哪里有问题?
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
double f(char *s,int l){
    int i,j;
    double a=0;
    for(i=l-1,j=0;i>0;i--){
        if(s[i]!=',') a=a+(s[i]-'0')*pow(10,j++);
    }
    if(s[0]!='-') a=a+(s[0]-'0')*pow(10,j);
    else a=-a;
    return a;
}

int main(void){
  char s1[20],s2[20];
  int i,l1,l2,a1,a2;
  while((scanf("%s",s1))!=EOF){
    scanf("%s",s2);
    l1=strlen(s1);
    l2=strlen(s2);
    a1=(int)f(s1,l1);
    a2=(int)f(s2,l2);
    printf("%d\n",a1+a2);
}
  return 0;
}
搜索更多相关主题的帖子: 错误 数据 include int pow 
2018-05-14 10:36
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
得分:7 
遇到什么错误说清楚
顺便 别用pow

https://zh.
2018-05-14 10:45
青蝶
Rank: 2
等 级:论坛游民
帖 子:160
专家分:51
注 册:2018-2-4
得分:0 
回复 2楼 lin5161678
为什么最好不用pow?
2018-05-14 11:05
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
得分:0 
你这里会把最后结果转换成 int
pow精度太低有可能出现
pow(10, 5) 结果 99999 这种情况 误差太大
另外pow在这里太慢了

https://zh.
2018-05-14 11:39
童生
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:205
专家分:455
注 册:2018-3-7
得分:7 
double pow(double x, double y); 返回浮点数,而你 a=a+(s[i]-'0')*pow(10,j++); 所有计算都会先强制转换为 double 然后再计算,得到结果再强制转换为 a的类型,这样就有产生误差可能
2018-05-14 11:39
童生
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:205
专家分:455
注 册:2018-3-7
得分:0 
回复 4楼 lin5161678
这个说法有问题,double精度怎么会比int低?C中混合类型运算式是低精度的会自动向高精度转换
2018-05-14 11:43
青蝶
Rank: 2
等 级:论坛游民
帖 子:160
专家分:51
注 册:2018-2-4
得分:0 
不用pow函数,还是有问题过不了
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int f(char *s,int l){
    int i,a=0,k=1;
    for(i=l-1;i>0;i--){
        if(s[i]!=','){
          a=a+(s[i]-'0')*k;
          k=k*10;
    }
}
    if(s[0]!='-') a=a+(s[0]-'0')*k;
    else a=-a;
    return a;
}

int main(void){
  char s1[20],s2[20];
  int i,l1,l2,a1,a2;
  while((scanf("%s",s1))!=EOF){
    scanf("%s",s2);
    l1=strlen(s1);
    l2=strlen(s2);
    a1=f(s1,l1);
    a2=f(s2,l2);
    printf("%d\n",a1+a2);
}
  return 0;
}
2018-05-14 12:09
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:7 
将完整的题目贴出来嘛
比如是不是可能输入 +1
2018-05-14 12:27
青蝶
Rank: 2
等 级:论坛游民
帖 子:160
专家分:51
注 册:2018-2-4
得分:0 
回复 8楼 rjsp

题目:
给定两个整数A和B,其表示形式是:从个位开始,每三位数用逗号","隔开。
现在请计算A+B的结果,并以正常形式输出。
输入:
输入包含多组数据数据,每组数据占一行,由两个整数A和B组成(-10^9 < A,B < 10^9)。
输出:
请计算A+B的结果,并以正常形式输出,每组数据占一行。
样例输入:
-234,567,890 123,456,789
1,234 2,345,678
样例输出:
-111111101
2346912
2018-05-14 13:02
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
得分:0 
-234,567,890 123,456,789
1,234 2,345,678

int 根本不够用
直接字符串相加把

https://zh.
2018-05-14 13:49



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-486904-1-1.html




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

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