除了第六个点全错??实在找不出问题。。

P2142 高精度减法

咳咳。。问题已经解决了,成功ac,但蒟蒻还是想问一句,为什么限制输出的必须是数字类型不能是字符类型。。。
by Cyan_rose @ 2018-07-10 14:24:02


@[Cyan_rose](/space/show?uid=48246) 同楼主第六点AC其余WA,我用的是数字类型输出但是为什么不行??请大佬指点。 代码如下: ```cpp #include<bits/stdc++.h> using namespace std; string sa,sb; int a[10002],b[10002],ans[10001]; void Init (string,int[]); void Minus (int [],int [],int[]); int main() { getline(cin,sa); getline(cin,sb); if (sa<sb) { string st; st=sa;sa=sb;sb=st; printf("-"); } a[0]=sa.size(); b[0]=sb.size(); ans[0]=1; Init(sa,a); Init(sb,b); Minus(a,b,ans); for (int i=ans[0];i>=1;--i) printf("%d",ans[i]); return 0; } void Init (string str,int n[]) { for (int i=1;i<=n[0];++i) n[i]=str[n[0]-i]-'0'; } void Minus (int ma[],int mb[],int mans[]) { while (mans[0]<=ma[0]||mans[0]<=mb[0]) { if (ma[mans[0]]<mb[mans[0]]) { ma[mans[0]]+=10; ma[mans[0]+1]--; } mans[mans[0]]=ma[mans[0]]-mb[mans[0]]; mans[0]++; } while (mans[mans[0]]==0&&mans[0]>1) mans[0]--; } ```
by 4kilometers @ 2018-07-10 16:30:20


各位大佬帮看一下啊啊啊
by 4kilometers @ 2018-07-10 16:44:35


貌似是这一步 if (sa<sb) string类型比较的时候优先比较第一位大小,所以在位数不同的时候会出问题 比如我试了下1800和900 (中间在init后面加了两串循环输出数组) 出来是这样的: -3 0 0 9 0 0 0 0 0 4 0 0 8 1 0 0 0 0 9100 多带的那个负号应该是前面比较的时候输出的 哦对了还有,你用getline貌似读了一排,输入数据如果是一排两个就会挂的吧(有没有这个数据我也不知道)
by Cyan_rose @ 2018-07-11 11:16:22


@[执笔、捃尘](/space/show?uid=18535)
by Cyan_rose @ 2018-07-11 11:16:39


@[Cyan_rose](/space/show?uid=48246) 多谢大佬指点!已经AC。确实是getline和字串长度问题。谢谢不厌其烦的修改
by 4kilometers @ 2018-07-11 14:19:09


@[执笔、捃尘](/space/show?uid=18535) 互帮互助应该的嘛~ (还有不要叫我大佬。。一个做题比你还少的蒟蒻真的瑟瑟发抖.jpg)
by Cyan_rose @ 2018-07-11 16:04:10


@[Cyan_rose](/space/show?uid=48246) 懂得比我多就是大佬
by 4kilometers @ 2018-07-11 16:28:13


吓!我这个NOIp普及组从来没做出3题的人怎么办啊?
by yummy @ 2018-07-23 09:40:09


@[执笔、捃尘](/space/show?uid=18535) 用cin就能过了
by A_puku @ 2018-07-28 09:34:34


| 下一页